home *** CD-ROM | disk | FTP | other *** search
/ Floppyshop 2 / Floppyshop - 2.zip / Floppyshop - 2.iso / diskmags / 0022-3.564 / dmg-0107 / gem.txt < prev    next >
Text File  |  1997-04-16  |  128KB  |  3,005 lines

  1.  ====================================================================
  2.  
  3.  (C) 1990 by Atari Corporation, GEnie, and the Atari RoundTables.  May be
  4.  reprinted only with this notice intact.  The Atari RoundTables on GEnie
  5.  are the *official* information services of the Atari  Corporation.
  6.  
  7.  
  8.  To sign up for GEnie service, call (with modem in HALF DUPLEX) 
  9.  800-638-8369.  Upon connection, type HHH
  10.  Wait  for the U#= prompt.  Type XJM11877,GENIE and hit
  11.  RETURN.  The system  will now prompt you for your information.
  12.  
  13.  ====================================================================
  14.  ************
  15. Topic 12        Wed Aug 27, 1986
  16. S.FERNANDEZ                  at 21:58 EDT
  17. Sub: Questions about GEM                    
  18.  
  19. This topic will serve to answer questions about GEM be it in programming or
  20. ussage.
  21.  
  22. 193 message(s) total.
  23.  ************
  24.  ------------
  25. Category 3,  Topic 12
  26. Message 1         Fri May 26, 1989
  27. B.DENHEYER1 [brian d]        at 19:24 EDT
  28.  
  29. I have a question about the use of the user-defined GEM objects. I have
  30. created a tree with user defined objects that incorporates my own objects
  31. which VDI draws for me.  What I would like to know is what exactly happens
  32. with the parameter which is suppoedly passed to the routine ?  In the MWC
  33. bindings it is ub_parm.  I can't seem to get a hold of it, and it would be
  34. very useful for me if the  custom routine could be passed a parameter. Any
  35. help or information on this subject will be greatly appreciated !
  36.  
  37. Brian Denheyer
  38.  
  39.  ------------
  40. Category 3,  Topic 12
  41. Message 2         Fri May 26, 1989
  42. C.DAYMON                     at 19:41 EDT
  43.  
  44. Brian,
  45.  I have created a few custom objects myself and there is information passed to
  46. the routine.  I think it is a pointer to a 'parameter' block. The best source
  47. of info I found on these routines was in Tim Oren's "Professional GEM" series
  48. which you can find in the library.  I think it consists of about 3 good sized
  49. archives, but is well worth the download. If I get a chance to look up the
  50. routines, I'll post the info.
  51.  
  52. -Craig W. Daymon
  53.  ------------
  54. Category 3,  Topic 12
  55. Message 3         Fri May 26, 1989
  56. A.HAMILTON1 [Alan H.]        at 23:17 MDT
  57.  
  58.       When a user-defined object routine is called, it's passed a PARMBLK
  59. pointer.  PARMBLK, defined in object.h, contains as one of its members
  60. pb_parm.  When the routine is called, ub_parm is copied into it.
  61.  
  62.       /
  63.   /  *  /  Alan
  64.  *     *
  65.  ------------
  66. Category 3,  Topic 12
  67. Message 4         Fri Jun 02, 1989
  68. B.DENHEYER1 [brian d]        at 00:44 EDT
  69.  
  70. Thanks you both for the information. I will indeed download the Professional
  71. GEM series as soon ass I find it. This place is great ! My questions always
  72. get answered ! Now if I could answer questions for someone else. Thanks again,
  73. I'm off to GEM land.
  74.  
  75. Brian Denheyer
  76.  ------------
  77. Category 3,  Topic 12
  78. Message 5         Mon Jun 19, 1989
  79. T.HALLIWELL                  at 23:21 PDT
  80.  
  81. Help please!! I have just formatted my sh204 into 4 5meg partitions and
  82. installed timeworks word processor on one of the partitions. I am being told
  83. that I have run out of GEM windows to open. Does anyone have a  clue as to
  84. what is going on. I have been using the hard disk for two  years with other
  85. word processors and no problem. Thanks for any help. Terry.
  86.  ------------
  87. Category 3,  Topic 12
  88. Message 6         Tue Jun 20, 1989
  89. STACE [Mark]                 at 02:32 EDT
  90.  
  91. T.Halliwell,
  92.  
  93. GEM only support a max of four (4) open windows at any given time.  Before you
  94. load Word Writer, try closing some of the unused windows at the desktop.
  95.  
  96. Mark
  97.  ------------
  98. Category 3,  Topic 12
  99. Message 7         Tue Jun 20, 1989
  100. DANSCOTT [Atari Corp.]       at 18:26 EDT
  101.  
  102. No, GEM supports up to 8 (eight!) windows at a time, but the desktop can only
  103. handle 4 open at a time.  This is due to the fact that the desktop must count
  104. on an ACC program opening a window of its own if the user calls on it.
  105.  
  106. I don't know how many windows timeworks wants to open, but it must be more
  107. than one.  Try closing any ACC that may be active (they should be good little
  108. ACC's and close themselves upon getting the message from the AES to do so,
  109. but....) or that 4th desktop window if you have it open.
  110.  
  111. Dan
  112.  ------------
  113. Category 3,  Topic 12
  114. Message 8         Tue Jun 20, 1989
  115. C.F.JOHNSON                  at 17:56 PDT
  116.  
  117. Dan,
  118.  
  119.   Actually, accessories have very little choice in the matter. When someone
  120. runs a program, any open accessories have their windows closed _for them_ by
  121. the system.  The AC_CLOSE message is saying "Hey, you.  I just closed your
  122. window." NOT "Hey, would you please close your window?"
  123.  
  124.   The problem must be caused by something else, Terry.  Sorry, I don't have
  125. any helpful suggestions...except to try the obvious, and boot without ANY AUTO
  126. folder programs and accessories and see if the same thing continues to happen.
  127.  
  128. - Charles
  129.  ------------
  130. Category 3,  Topic 12
  131. Message 9         Tue Jun 20, 1989
  132. TIMPURVES                    at 23:29 EDT
  133.  
  134. It really pisses me off that GEM shuts down the ACC's just because I deside to
  135. load an application. Would be much nicer is it only shut them down on a
  136. TOS/TTP launch. In fact i wrote a "shell" that did just that.. The problem was
  137. that a lot of well know apps _assumed_ that the first window they opened was
  138. WINDOW ZERO!!!! Talk about morons!
  139.  
  140.  ------------
  141. Category 3,  Topic 12
  142. Message 10        Thu Jun 22, 1989
  143. TOWNS                        at 02:17 EDT
  144.  
  145.  Yep.. exactly. They are counting on things that might not be 
  146.  true.
  147.  
  148.  Also, when you do an appl_exit() call from an application it 
  149.  also sends the AC_CLOSE message to any open desk accessories.
  150.  
  151.  -- John
  152.  ------------
  153. Category 3,  Topic 12
  154. Message 11        Fri Jun 23, 1989
  155. JLS [John STanley]           at 02:11 CDT
  156.  
  157.   Charles, my understanding is that the windows are closed when you return to
  158. the desktop, not when a program is run.  This means that running from a shell,
  159. if your accessory doesn't close its own windows you may run out of window
  160. handles.  The accessory should close and free -everything- it has requested
  161. use of (files, windows, & memory) when it receives an AC_CLOSE message.  The
  162. fact that many don't and manage to avoid screwing up is only because the
  163. desktop is doing illegal things to insure the resources get taken care of.
  164.   Mind you, I'm not an accessory expert, this is just the impression I've
  165. gotten from all the problems I've had to deal with in writing command shells
  166. that allow using accessories.  If Allan, Ken, or John Townsend are around, I'd
  167. appreceate any clarification on this that they can provide.
  168.  
  169.   John STanley
  170.  ------------
  171. Category 3,  Topic 12
  172. Message 12        Sat Jun 24, 1989
  173. T.HALLIWELL                  at 17:55 PDT
  174.  
  175. Thanks everybody for the suggestions and comments on my problem about the
  176. windows. I finally figured it out. I had made some adjustments in my
  177. desktop.inf and I left an @ at the beginning of my W and not at the  end. I
  178. had a devil of a time as I couldn't get into my hard disk to get at my
  179. desktop.inf on my hard disk. I finally ran ahdi outside of the  auto folder,
  180. and was able to access my hard disk without using the desktop.inf on my hard
  181. disk. I hope this is clear... or rather I hope one of you understands what I
  182. just said, in case someone else has a similar problem. Thanks again for the
  183. assistance and support. Terry.
  184.  ------------
  185. Category 3,  Topic 12
  186. Message 13        Mon Jun 26, 1989
  187. S.JOHNS                      at 07:37 EDT
  188.  
  189. Why would it be necessary for accessories to relinquish their memory  on an
  190. AC_CLOSE?  I thought that the whole point was for accessories to reserve all
  191. the memory they would ever need at initialization, and then never to ask for
  192. more.  If you punted your memory on receipt of an  AC_CLOSE then you would
  193. have to ask for it back again, or else be  dead for good.  I've got
  194. accessories that will all run with their own window on the screen
  195. simultaneously (top window active) and then all shut down gracefully and then
  196. revive later when a .PRG comes along to "clean house".  The accessories all
  197. hold on to their memory and everything seems to work fine.  Comments?
  198.  ------------
  199. Category 3,  Topic 12
  200. Message 14        Mon Jun 26, 1989
  201. JLS [John STanley]           at 22:37 CDT
  202.  
  203.   S.JOHNS, sorry if I was unclear.  The comments I made about how ACCs should
  204. always free all resources allocated to them when they receive the AC_CLOSE
  205. message applies only to resources that are requested when the acc is called
  206. via the menubar.  The specific thing that triggered my comment was someone
  207. talking about how they thought they shoudn't free their window handles when
  208. shutting down (which is wrong and causes many problems...). when those
  209. accessories are run from a shell program (that can't pull the illegal tricks
  210. to clean up that the desktop can...)
  211.  ------------
  212. Category 3,  Topic 12
  213. Message 15        Thu Jun 29, 1989
  214. S.JOHNS                      at 07:17 EDT
  215.  
  216. Do you mean, in other words, that if an accessory grabs memory at the time of
  217. its menubar invokation (which is what I understand it really shouldn't do)
  218. THEN it should free that memory on AC_CLOSE?  If so, I agree.  But, I've been
  219. told that to ask for memory at any time after initialization is asking for
  220. trouble.  Others must know more about this than I do, but I avoid it on a tip
  221. and seem to have no problems.
  222.  ------------
  223. Category 3,  Topic 12
  224. Message 16        Thu Jun 29, 1989
  225. C.F.JOHNSON                  at 08:30 PDT
  226.  
  227. S.Johns,
  228.  
  229.   An accessory can safely grab memory at its startup time.  And there is a
  230. technique that allows an accessory to allocate memory at other times too;
  231. although this technique will occasionally result in unavoidable memory
  232. fragmentation.  The problem with accessories and Malloc is due to the fact
  233. that the system keeps a pointer to the basepage of the current application. 
  234. Whenever a Malloc call comes through, the system assigns that allocated memory
  235. to the basepage of the current app.  If an accessory does this while the GEM
  236. desktop is the current app, there won't be a problem because it's not possible
  237. to exit from the desktop.
  238.  
  239.   But when another application terminates, the system methodically frees up
  240. all allocated blocks assigned to its basepage.  And since, when you open an
  241. accessory, the basepage pointer does NOT point to the acc's basepage, that
  242. means that any memory allocated while the accessory was active gets assigned
  243. to the current app, not to the acc.  Hence, it gets freed along with
  244. everything else when the application terminates.
  245.  
  246.   The simple solution is to change the basepage pointer to point to the
  247. accessory's basepage when it needs to allocate memory, and replace the pointer
  248. after Malloc'ing.  The Mega ROMs and TOS 1.4 now have a legal way to find this
  249. pointer...it's in the OS header at the beginning of ROM.  For TOS 1.0, you'd
  250. have to use a hard address (which is OK, since it won't change).
  251.  
  252. - Charles
  253.  ------------
  254. Category 3,  Topic 12
  255. Message 17        Fri Jun 30, 1989
  256. JLS [John STanley]           at 02:06 CDT
  257.  
  258.   S.JOHNS>  Yes, that's exactly what I mean....
  259.  ------------
  260. Category 3,  Topic 12
  261. Message 18        Sun Jul 30, 1989
  262. J.H.CARROLL                  at 13:20 EDT
  263.  
  264.   Here's a short question : I just downloaded "PACKER" from the  libraries...
  265. What is this program doing so that it can reduce the size of an executable
  266. program file by 50% ?
  267.  
  268. Jon
  269.  ------------
  270. Category 3,  Topic 12
  271. Message 19        Tue Aug 01, 1989
  272. W.V.FISHER                   at 20:33 CDT
  273.  
  274.  Jon - That is the  question I wanted to ask! What is being compressed?
  275.  ------------
  276. Category 3,  Topic 12
  277. Message 20        Tue Aug 08, 1989
  278. N.DAVIS1                     at 20:50 EDT
  279.  
  280.  I have include raster images in forms by using a user-defined object which
  281. just calls some code, does a vroom-copy, and no  problem.  Why doesn't this
  282. work with a new desktop form?  thanks, Neil
  283.  ------------
  284. Category 3,  Topic 12
  285. Message 21        Tue Aug 08, 1989
  286. GRIBNIF                      at 21:32 EDT
  287.  
  288.  What happens when it doesn't work? Does it crash or just not do anything?
  289.  If the latter is the case, then I might check the clipping rectangle to
  290.  see that it is being set correctly. I had noticed that making an AES call
  291.  during the drawing of the desktop user-defined object definitely causes
  292.  a crash (because you are effectively calling the AES from within an AES
  293.  call, which is a no-no) but doing a VDI call to blit something should
  294.  work. If not, then you'll have to go to Line A.
  295.  
  296.  Dan
  297.  ------------
  298. Category 3,  Topic 12
  299. Message 22        Fri Aug 18, 1989
  300. JLS [John STanley]           at 05:25 CDT
  301.  
  302.   BTW, I still haven't seen an "official" response relating to my
  303. comments/questions in message #11.  Do the folks at Atari read this topic?
  304.  
  305.   On an entirely different subject:  I'm writing code to display a desktop-
  306. style screen just before invoking a GEM program via a Pexec call.  I've got
  307. the code working to fill all but the top of the screen with the background
  308. color/gray.  What I'm looking for is a code snippit that will draw the "blank
  309. menubar with filename in it" at the top of the screen.  I'm trying to avoid
  310. having to use a resource with this so I want to avoid directly using anything
  311. that requires a resource.
  312.  
  313.   Suggestions anyone?
  314.  ------------
  315. Category 3,  Topic 12
  316. Message 23        Fri Aug 18, 1989
  317. DARLAH [RT~SYSOP]            at 08:16 EDT
  318.  
  319. I will make John aware of this topic if he does not.
  320.  ------------
  321. Category 3,  Topic 12
  322. Message 24        Fri Aug 18, 1989
  323. TOWNS                        at 15:41 EDT
  324.  
  325.  I am not sure on this. but here is what I believe to be true:
  326.  
  327.  1. The desktop will internally close any windows and send AC_CLOSE
  328.     messages to ANY open desk accessories. It's the responsibility 
  329.     of the desk accessory to respond to the AC_CLOSE message. Please
  330.     note: The desktop doesn't actually show you closing the windows 
  331.     on the desktop, it does it internally. This means that you will
  332.     never see the desktop physically close windows.
  333.  
  334.  2. On an appl_exit() call.. The AES will close ANY open windows and
  335.     send AC_CLOSE messages to any open desk accessories. Please note:
  336.     It's bad programming practice to rely on the AES to close your 
  337.     windows for you. You should close them yourself before calling an
  338.     appl_exit() at the end of your program.
  339.  
  340.  As for the other questions regarding the freeing on malloced memory
  341.  for desk accessories and AC_CLOSE, I will get back to you..
  342.  
  343.  -- John
  344.  ------------
  345. Category 3,  Topic 12
  346. Message 25        Mon Aug 21, 1989
  347. C.F.JOHNSON                  at 10:56 PDT
  348.  
  349. John,
  350.  
  351.   What about the problems with desk accessories that take over system vectors,
  352. when you change resolutions from the desktop? I really wish something had been
  353. done about this in TOS 1.4... it's a glaring shortcoming.
  354.  
  355.   (For anyone who doesn't know what I'm referring to....the desktop frees up
  356. all the desk accessories on a res change, but _doesn't_ tell them about it! 
  357. So if any accessory has installed itself in interrupts or trap vectors, it
  358. will almost certainly cause a crash on a res change.  The only solution [which
  359. I used in MultiDesk] is to use a complicated, kludgy, undocumented [although
  360. not strictly 'illegal'] method.  I would dearly love for Atari to either have
  361. the desktop replace all interrupt and trap vectors on a res change, or failing
  362. that, to at _least_ document a method by which accessories can take care of
  363. the problem themselves.)
  364.  
  365. - Charles
  366.  ------------
  367. Category 3,  Topic 12
  368. Message 26        Mon Aug 21, 1989
  369. GRIBNIF                      at 20:19 EDT
  370.  
  371.  If the desktop were to replace all the trap vectors on a resolution
  372.  change, then it would also have to reload everything from the AUTO folder
  373.  (since this is more often the source of trap interception). Of course,
  374.  some AUTO folder programs depend on GEM not being present at all, since
  375.  it normally isn't when they are run. So, if you could basically force the
  376.  rez change, punt the AES, reload the AUTO folder, and then re-initialize
  377.  GEM in the correct rez (ignoring the one in DESKTOP.INF, of course) then
  378.  all would be well. Have fun, Ken! <smile>
  379.  
  380.  Dan
  381.  ------------
  382. Category 3,  Topic 12
  383. Message 27        Mon Aug 21, 1989
  384. C.F.JOHNSON                  at 19:00 PDT
  385.  
  386.   But by the time the desktop application is up and running, the AUTO folder
  387. programs have already been installed.  It wouldn't be necessary to reload the
  388. AUTO stuff at all; all the desktop would need to do would be to take a
  389. 'snapshot' of the vectors at the time it runs, and replace them on a res
  390. change.  The AUTO programs could remain in memory without any problems, since
  391. the desktop would be restoring the vectors to the state they were in _after_
  392. the AUTO folder.
  393.  
  394. - Charles
  395.  ------------
  396. Category 3,  Topic 12
  397. Message 28        Wed Aug 23, 1989
  398. JLS [John STanley]           at 01:18 CDT
  399.  
  400.   I just wish the accessories would be told about a rez change via the normal
  401. GEM message method.  A well written accessory shoudln't have any trouble
  402. "adapting" to a new resolution if there was a standard for it.  Reloading the
  403. accessorys is a kludge that shouldn't ever have been retained past TOS 1.0.
  404.  
  405.   Having to "semi-reboot" just to change resolutions is a throw-back to the 8-
  406. bit style game programs where you had to reboot the machine to exit some
  407. programs.  This is something that has no place in a "professional" computer
  408. system.
  409.  
  410.   John <this is a major irritant, or had you guessed?> Stanley
  411.  ------------
  412. Category 3,  Topic 12
  413. Message 29        Wed Aug 23, 1989
  414. C.F.JOHNSON                  at 09:36 PDT
  415.  
  416.   I agree 100%, John.  The problem with desk accessories and changing
  417. resolutions is a tremendous hassle.  Personally, I don't care _what_ method
  418. Atari uses to solve it, as long as they do something.  Document a method that
  419. accs can use, at the very least - it's too late to fix the problem in TOS 1.4,
  420. but I would think that, with the source code for TOS in hand, it wouldn't be
  421. too difficult to say to developers, "OK, do this, this, and this, and you'll
  422. survive a res change."
  423.  
  424.   Come on, Atari....talk to us.
  425.  
  426. - Charles
  427.  ------------
  428. Category 3,  Topic 12
  429. Message 30        Wed Aug 23, 1989
  430. TOWNS                        at 15:12 EDT
  431.  
  432.  HAve you guys thought about talking to someone from Atari about 
  433.  this? This area is not read by most of the Atari people and I 
  434.  can't do anything about this problem. Try contacting ATARIDEV
  435.  (J. Patton) or K.BAD.
  436.  ------------
  437. Category 3,  Topic 12
  438. Message 31        Thu Aug 24, 1989
  439. GRIBNIF                      at 00:31 EDT
  440.  
  441.  Actually, John, I don't know about a message being passed as the best
  442.  method. Some desk accessories use different resource files for different
  443.  resolutions and a desk accessory would either have to live with having
  444.  the wrong one in memory or, if GEM cleared it out on the rez change
  445.  (which, in itself, would probably create memory fragmentation because all
  446.  the DA's are left in memory when the RSC's aren't) it would always have
  447.  to reload the RSC, even if there wasn't a different one for the new
  448.  resolution.
  449.  
  450.  Dan
  451.  ------------
  452. Category 3,  Topic 12
  453. Message 32        Thu Aug 24, 1989
  454. TOWNS                        at 17:21 EDT
  455.  
  456.  A quick question.. why does it make a different if desk
  457.  accessories and reloaded on a resolution change?
  458.  ------------
  459. Category 3,  Topic 12
  460. Message 33        Thu Aug 24, 1989
  461. C.F.JOHNSON                  at 20:42 PDT
  462.  
  463. John,
  464.  
  465.   It doesn't really make a difference if accessories are reloaded on a res
  466. change...._unless_ one of the accessories has grabbed any interrupt or trap
  467. vectors.  On a res change, the accessories are freed, but they are not told
  468. about it.  Consequently, when memory is cleared (when the first acc loads
  469. after the res change) these nice interrupt vectors are suddenly pointing at
  470. lovely zeroes, and the result is a system crash.
  471.  
  472.   In my opinion, the best way for the system to handle this would be to take a
  473. 'snapshot' of all pertinent vectors when the desktop first runs, and then
  474. replace this snapshot before freeing the accessories and performing the res
  475. change.
  476.  
  477.   A new "message" for accessories would not really solve the problem, unless
  478. it was guaranteed that the accs would get this message in the exact reverse
  479. order that they grabbed their vectors....which is impossible with the current
  480. ST event management system.
  481.  
  482. - Charles
  483.  ------------
  484. Category 3,  Topic 12
  485. Message 34        Fri Aug 25, 1989
  486. K.BAD [S/W Engine]           at 04:21 EDT
  487.  
  488. Okay, John Townsend has heard me say this before again and again, I guess it's
  489. time for me to say it here.  Now, everybody repeat after me:
  490.  
  491.    A DESK ACCESSORY IS NOT A PROCESS.
  492.    A DESK ACCESSORY IS NOT A PROCESS.
  493.    A DESK ACCESSORY IS NOT A PROCESS.
  494.  
  495.   There, now that I've got that off my chest, let me get on with the topic at
  496. hand.  Because, as we all know, a desk accessory is not a process, it does not
  497. have all the facilities available to it that processes do.  Notably, it can
  498. not expect to keep files open and survive, and it can not Malloc memory from
  499. the system and expect that memory to always be available to it, and it should
  500. not intercept vectors that will cause problems later!
  501.  
  502.   I really hesitate to say all this, because the folks involved in this
  503. discussion here have "stretched" the definition of a desk accessory way beyond
  504. the original intent.  A desk accessory should be, hmm... maybe Webster can
  505. help me on this one:
  506.  
  507.   ac-ces-so-ry n,
  508.   a: a thing of secondary or subordinate importance : ADJUNCT
  509.   b: an object or device not essential in itself but adding to the beauty,
  510. convenience, or effectiveness of something else
  511.  
  512.   What you seem to want is for desk accessories to be processes in their own
  513. right, and that just ain't the case. The solution, although it may seem
  514. inconvenient for users, is to team accessories with terminate and stay
  515. resident utilities so that you get the best of both worlds.  The accessory
  516. becomes the front end of the utility that hangs out in memory, cleanly
  517. survives resolution changes, etc.  The accessory adds to the beauty and
  518. convenience of the TSR.
  519.  
  520.   And anyone who complains about the AES effectively having to reboot on a
  521. resolution change is welcome to write a new AES that does not require that. 
  522. Or you can send your resume to 1196 Borregas to the attention of Leonard
  523. Tramiel, with a note explaining that you would like to take over AES revision
  524. from Ken Badertscher.  I would like nothing more ;-)  TRUST ME when I say that
  525. it is NOT as easy as it sounds...
  526.  
  527.   ttfn...
  528.   (*ken @ atari*)
  529.  ------------
  530. Category 3,  Topic 12
  531. Message 35        Fri Aug 25, 1989
  532. K.BAD [S/W Engine]           at 04:27 EDT
  533.  
  534. One other thing... John is right - I don't get up here very often and when I
  535. do, it's "recreation time" ;-)  My job is mostly  concerned with system
  536. software development, not support, it's just that I'm a masochist and like to
  537. get online and take punishment.
  538.  
  539.   If you have serious problems or concerns, please raise them with the
  540. developer support folks at Atari, and/or leave a message in the ATARIDEV
  541. conference here on GEnie, that's what it's here for.
  542.  
  543.   Thanks for your consideration...
  544.   (*ken @ atari*)
  545.  ------------
  546. Category 3,  Topic 12
  547. Message 36        Fri Aug 25, 1989
  548. JLS [John STanley]           at 06:19 CDT
  549.  
  550.   Ken, I know what you're saying, but your last msg could -easily- be read as
  551. "pay Atari for developer access to GEnie or leave me alone..."...
  552.   Users of the ST/MEGA and non-"Atari developer" programmers shouldn't have
  553. their comments and concerns ignored just because they don't put their comments
  554. in the "right place" which people have to pay a significant ammount of money
  555. to access...
  556.  ------------
  557. Category 3,  Topic 12
  558. Message 37        Fri Aug 25, 1989
  559. DARLAH [RT~SYSOP]            at 08:49 EDT
  560.  
  561. I have to admit, I have enjoyed the conversation in this area. I would hate to
  562. limit those that did not pay their $$. Those that have can get priviliged info
  563. but what is going on here should not be in that classification.  <------ Just
  564. my 2 cents but I feel strongly on this one.
  565.  
  566. Anyone ever noticed how much Category 3 has grown??
  567.  ------------
  568. Category 3,  Topic 12
  569. Message 38        Fri Aug 25, 1989
  570. D.FLORY [ALERT-syscop]       at 15:02 EDT
  571.  
  572. John, and anyone, if you want to get info to the people on the Developer area
  573. just send E-mail to TOWNS, ATARIDEV or K.BAD. John is the SYSOP there,
  574. ATARIDEV is J.Patton of developer support and we all know who the harried
  575. K.BAD is.
  576.  ------------
  577. Category 3,  Topic 12
  578. Message 39        Fri Aug 25, 1989
  579. DARLAH [RT~SYSOP]            at 18:47 EDT
  580.  
  581. You can also leave message in the developers area if you are a registered
  582. developer.
  583.  ------------
  584. Category 3,  Topic 12
  585. Message 40        Fri Aug 25, 1989
  586. C.F.JOHNSON                  at 16:34 PDT
  587.  
  588. Ken,
  589.  
  590.   If you can tell me the page number in the Developer's Kit documentation
  591. where it says that desk accessories should not intercept vectors, I'd be very
  592. surprised.  I've read all of that stuff from cover to cover, and I honestly
  593. don't remember seeing anything like that.  Yes, I know about the problems with
  594. file handles and with Mallocs from accessories, but interrupt vectors? This is
  595. news to me.
  596.  
  597.   Frankly, something like MultiDesk would be _extremely_ difficult to
  598. implement with a TSR program/desk accessory  combination.  But if there were
  599. some official word from Atari saying, "This is the way it should be done" when
  600. I started working on it, that's what I would have done.  (Probably.)
  601.  
  602.   It seems to me that it's a little late to be trying to put this particular
  603. cat back in the bag, when some of the most popular utilities for the ST are in
  604. the form of desk accessories that take over interrupt vectors.  The purpose of
  605. this whole discussion (at least _my_ purpose anyway) is to try to find a way
  606. that "pseudo-processes" like desk accessories can somehow legally survive a
  607. resolution change.  Most professional developers have worked out some sort of
  608. scheme for doing this, but none of them are totally reliable.  And the hackers
  609. and hobbyists are more in need of information like this than anyone. Most of
  610. the tech support calls we get relate to this or that public domain/shareware
  611. program that always ends up doing something really dumb; but you know, I can't
  612. blame people for trying some of this stuff when I realize that most of the
  613. time, they're operating in a complete vacuum, as far as hard info about
  614. handling interrupts and trap vectors goes.
  615.  
  616. - Charles
  617.  ------------
  618. Category 3,  Topic 12
  619. Message 41        Sat Aug 26, 1989
  620. K.BAD [S/W Engine]           at 00:14 EDT
  621.  
  622. John S. & Darlah:  TANSTAAFL.
  623.  (There Ain't No Such Thing As A Free Lunch.)
  624.  
  625.   I agree with you in spirit, though, that's why I log in here in the "free
  626. support" category and answer questions!  I apologise if my response seemed a
  627. bit knee-jerky, but I've been getting quite a bit of flak lately (not all of
  628. it from here) for the fact that Atari doesn't provide support freely to all.
  629. For my part, though, I'll do my best to continue to ladel out the soup here in
  630. the soup kitchen of programming information. But the people that want an all-
  631. you-can-eat brunch are encouraged to dress up and head on out to the nicer
  632. dining establishments. But don't expect Duck L'Orange for a dime...
  633.  
  634.  Charles:
  635.  You have struck to the heart of the problem.  There ISN'T anywhere in the
  636. documentation that discusses what DA's should and should not do.  There's
  637. precious little discussion of what DA's are in the first place!  I am
  638. reminded, though, of the old joke:
  639.   Patient: "Doc, it hurts when I do this!"
  640.   Doctor: "Well, then don't do that!"
  641.  In message #34 I didn't say that DA's shouldn't take vectors, I said that
  642. they shouldn't take vectors which would cause problems later.  That's just
  643. common sense.  But you're looking for a way for DA's to communicate more
  644. easily with TSR's...
  645.  Here's an idea (completely off the top of my head, and I have NO idea how
  646. well it would work in implementation, but...):
  647.   Make the DA a front end only.  Have all the vector-grabbing "guts" of the
  648. application live in the TSR.  When the DA is first loaded (or reloaded on a
  649. res change) have it communicate to the TSR that it's time to grab vectors
  650. again, or do whatever else is needed because the AES has yanked the floor out
  651. from under the DA.  Implement some kind of message passing (via trap calls,
  652. shared memory, whatever) that enables the DA to transfer control to the TSR
  653. code at the appropriate times.
  654.  
  655.   Recently, we have come up with something called the "cookie jar" which
  656. should help a situation like this IMMENSELY. As soon as I have leave to do so,
  657. I'll post the cookie jar specification PUBLICLY so that everyone can see how
  658. it works. Basically it is a system-level supported means for TSR's to register
  659. their existence so that other programs can find, via a simple table look up,
  660. whether a particular extension or TSR service is available.  It's simple,
  661. straightforward, and I wish someone had come up with it years ago, because it
  662. would have solved a LOT of compatibility problems that have cropped up in the
  663. TSR arena (for example, the Diablo emulator's less-than-ideal method for
  664. determining whether or not it was installed).
  665.  
  666.   Forgive the length of this message...  I hope we can come up with some solid
  667. solutions, though!
  668.  
  669.   ttfn...
  670.   (*ken @ atari*)
  671.  ------------
  672. Category 3,  Topic 12
  673. Message 42        Fri Aug 25, 1989
  674. C.F.JOHNSON                  at 22:58 PDT
  675.  
  676.   "Cookie jar," eh?  Now that's the kind of thing I've been talking about.  I
  677. guess I'll have to wait for more details about it, but that sounds a damn
  678. sight better than what we had before, which is nada, nil, zilch, a free-for-
  679. all.  (Actually, that should read "what we have now" above.)
  680.  
  681.   Thanks for the response; if I was starting to sound a little frustrated
  682. there, it's because I _have_ talked to various people at Atari about this res
  683. change problem several times over the course of the last three years, with no
  684. result.
  685.  
  686. - Charles
  687.  ------------
  688. Category 3,  Topic 12
  689. Message 43        Sat Aug 26, 1989
  690. DOUG.W                       at 07:09 EDT
  691.  
  692. I'm currently using a scheme similar to what Ken suggests, and have an AUTO
  693. program which intercepts the vectors (in my case, TRAP #13 & #14), and an ACC
  694. which makes certain TRAP #13 or #14 calls which my interceptor picks up and
  695. handles as appropriate.  The only thing you have to be careful of is that your
  696. "key" TRAPs are unique.  I am using legal call with illegal (but specific)
  697. parameters, such as a buffer address of $100, which will obviously cause an
  698. error if the AUTO program hadn't been run, but which the AUTO program can
  699. easily recognize and deal with.
  700.  
  701. --Doug
  702.  ------------
  703. Category 3,  Topic 12
  704. Message 44        Sat Aug 26, 1989
  705. C.F.JOHNSON                  at 10:17 PDT
  706.  
  707.   Unfortunately, there are several aspects of MultiDesk's operation that make
  708. it _extremely_ difficult to code in this way. (As I said before...and being
  709. any more specific would reveal trade secrets.)  It wouldn't be impossible, but
  710. at this point in it's development (we're at version 1.82), I'm not very open
  711. to the idea of a radical restructuring like that.
  712.  
  713.   The other point that should be made is that this TSR/ACC approach makes
  714. things exactly _twice_ as complicated as before for the user.  (Not to mention
  715. how it complicates the programmer's job, maintaining and updating two separate
  716. programs.)  Yes, it is an idea, and it's a way to circumvent the res change
  717. problems with accs .... but it's _far_ from ideal, in my opinion.
  718.  
  719. - Charles
  720.  ------------
  721. Category 3,  Topic 12
  722. Message 45        Sun Aug 27, 1989
  723. K.BAD [S/W Engine]           at 03:50 EDT
  724.  
  725. Charles, believe me, I know *exactly* what you mean when you talk about
  726. radical restructuring being a major pain. The way the AES is put together
  727. would make it incredibly difficult to pull off a res change without rebooting
  728. the AES. Res dependencies are not encapsulated in any way.  They're scattered
  729. all over the code, and it would take a long time (development wise) to rat
  730. them all out.
  731.  
  732.   I agree, the TSR/DA approach is not ideal, but I've used it successfully in
  733. a couple of applications I wrote for my own use, so I know it can be done
  734. without too much difficulty (if you start with that approach in mind!).
  735.  
  736.   The problem with other methods that have been discussed here (having the AES
  737. send a unique message at res change time) is that they won't work in existing
  738. ST's, and we're trying to come up with a solution that will work now, n'est ce
  739. pas? I'm open to suggestinos...
  740.  
  741.   ttfn...
  742.   (*ken @ atari*)
  743.  ------------
  744. Category 3,  Topic 12
  745. Message 46        Tue Aug 29, 1989
  746. JLS [John STanley]           at 20:02 CDT
  747.  
  748.   Ken, first off, thanks for the support you have been giving out soup-kitchen
  749. style.  I'm a registered developer, but I firmly believe that Atari's best
  750. interests (and mine) are served when more programmers (developer and non) know
  751. more about "the right way" to do STuff.
  752.  
  753.   About the "Cookie Jar".  I'll be looking forward to seeing more on this
  754. soon.  One thing I've considered that this may be able to help with (if it's
  755. not cast in stone yet) is allowing TSR's to share info about who's resident,
  756. what resources (hotkeys, interrupt vectors and subfunctions) are being used to
  757. avoid or deal with possible conflicts.  Is this out in left field, or will the
  758. CJ be able to help with this?
  759.  
  760.   Last, on the rez-change acc vector-intercept (RAVI?) problem.
  761.   If, along with all the other vectors an accessory traps, it also traps the
  762. vector at $46e (swv_vec in "Internals"), the accessory will be able to
  763. momentarily gain control just before the reset takes place.  When the system
  764. jumps thru this vector, the rez-change code in the accessory can replace the
  765. original vectors which will effectively un-install the accessory from that
  766. trap.  As long as the original hooking of the vectors takes place with no gem
  767. calls interspersed, this should unstack the accessories in the same order they
  768. were installed in.  When finished un-instaling, then the rez-change code just
  769. jumps thru the original swv_vec pointer to the next routine in the chain and
  770. finaly to the system reset vector...
  771.   I came up with this idea when I first heard about accessories being
  772. installed on vectors, but I haven't done that much with accessories (TSR's are
  773. easier for me :^) and kept wondering why people didn't use this method to
  774. prevent accessories from crashing the system on a rez change if they install
  775. themselves   on permanent vectors...  I've yet to hear anyone mention this
  776. method and don't know why...
  777.  
  778.   This avoids the problems with the dual TSR/DA and the only possible problem
  779. is if the user loaded a TSR program from the desktop or a shell.  If that
  780. happend, the accessory would have to unhook the late-loading TSR from the
  781. vector to avoid a crash and it would be up to the user to reload the TSR again
  782. after the rez-change...
  783.   Anyone see any problems with this method?
  784.  ------------
  785. Category 3,  Topic 12
  786. Message 47        Tue Aug 29, 1989
  787. C.F.JOHNSON                  at 18:19 PDT
  788.  
  789. John,
  790.  
  791.   There's just one problem with using the vector at $46E to catch a resolution
  792. change from the desktop...it doesn't work.
  793.  
  794.   That's one of the first things I tried.  (Always go with the documented
  795. stuff first...)  If that vector _were_ actually used during a resolution
  796. change from the desktop, it would work just fine...but noooo.
  797.  
  798. - Charles
  799.  ------------
  800. Category 3,  Topic 12
  801. Message 48        Tue Aug 29, 1989
  802. JLS [John STanley]           at 22:11 CDT
  803.  
  804.   Oh...  I see now, thanks Charles.
  805.   The $46e vector is only used on monitor-change, not on all resolution
  806. changes...   <sigh> ... Back to the drawing board.
  807.  
  808.   What method does the desktop use to trigger the reset for the resolution
  809. change?  (If it's YAIDT (yet another illegal desktop-only trick) I'm probably
  810. going to scream...)
  811.   <But, why stop now>...?  ;^)
  812.  
  813.   Ken, desktop internals question.  I've got a hunch that the desktop punches
  814. the new res value into the word at $44a and then does some black magic to
  815. trigger the accessory+GEM special reset.  Is there -any- system call between
  816. the point when the new value is placed there and when the psudo-reset takes
  817. place?  Something that could be used to monitor for a new value?
  818.  ------------
  819. Category 3,  Topic 12
  820. Message 49        Wed Aug 30, 1989
  821. GRIBNIF                      at 21:24 EDT
  822.  
  823.  John,
  824.  
  825.  Just because only the desktop can do it, it's not illegal <smile>.
  826.  
  827.  Dan
  828.  ------------
  829. Category 3,  Topic 12
  830. Message 50        Fri Sep 01, 1989
  831. K.BAD                        at 01:38 EDT
  832.  
  833. Why do you people keep insisting that the Desktop is not part of the system? 
  834. Why, why, why???  I can understand you wishing that it wasn't (especially
  835. Gribnif ;-) but it just isn't the case!  The desktop is an integral part of
  836. the AES, in all of the current TOS implementations.  The resolution change
  837. that takes place when the user selects a different resolution from the Set
  838. Preferences dialog is yet another example proving this.  The desktop shares a
  839. variable with the AES, telling the AES whether or not it's time to reboot the
  840. AES and change resolution.  And no, Atari can't publish that address, because
  841. it is different in each and every TOS ROM version.
  842.  
  843.   I looked for a special routine which might be used to signal a res change to
  844. a desk accessory, but couldn't find one in a quick glance at the
  845. boot/reschange sequence. Here is an oversimplified pseudo-C version of the
  846. AES/desktop:
  847.  
  848.  aes_desktop()
  849.  {
  850.       for(;;) {
  851.             initialize();
  852.             load_accessories();
  853.             if( first_boot && autoboot_app_exists )
  854.                   shel_write( autoboot_app );
  855.             aes_shell();
  856.             free_accessories();
  857.       }
  858.  }
  859.  
  860.  aes_shell()
  861.  {
  862.       do {
  863.             if( something_shel_written )
  864.                   run_program();
  865.             else
  866.                   desktop();
  867.       } while (!res_change);
  868.  }
  869.  
  870.   Maybe, if you were hooking traps, you could hook trap 1 and look for an
  871. Mfree call with your basepage as the argument? I don't know.  I much prefer
  872. the TSR/DA combo, since it's cleaner and more flexible.
  873.  
  874.   ttfn...
  875.   (*ken @ atari*)
  876.  ------------
  877. Category 3,  Topic 12
  878. Message 51        Sun Sep 03, 1989
  879. PSINC                        at 11:06 EDT
  880.  
  881. I'll add my two cents worth.  Being a primarily hardware developer, I'm
  882. unbiased<grin>.
  883.   Ken is right, DA's shouldn't do anything that will "cause problems later".
  884. However, since Atari has done very little to tell us what's naughty and what's
  885. nice regarding DA's, I can't see how we are supposed to know what will "cause
  886. problems later".  We don't have a real good guide book to go by (ala "Inside
  887. Macintosh' etc.).  Therefore, I think that since it's Atari's responsibility
  888. to make the developers aware of what is correct and what isn't regarding
  889. programming, if Atari fails to do so they should do all they can to help the
  890. developers make the existing programs compatible (Charles idea) and not simply
  891. say "ah, you probably shouldn't have done that" after someone has coded a
  892. program for a year!
  893.   Hmm, that was the my longest sentence ever!
  894.  Mark
  895.  ------------
  896. Category 3,  Topic 12
  897. Message 52        Sun Sep 03, 1989
  898. C.F.JOHNSON                  at 09:48 PDT
  899.  
  900. Mark,
  901.  
  902.   Amen!  That's my point exactly.  All of a sudden, we're being told that DAs
  903. shouldn't do things (like steal vectors) that will "cause problems later". 
  904. I've been a registered developer for _years_ and this is the first time I've
  905. heard this policy...if simple guidelines had been laid out in the developer's
  906. documentation a long time ago, the problems with desk accessories and res
  907. changes would not exist today.
  908.  
  909.   I sincerely doubt that any user is going to want to give up Turbo ST, or
  910. MultiDesk, or Thunder, or any of the myriad other DAs that take over
  911. interrupt/trap vectors.  I know I wouldn't. And it's a bit much to expect the
  912. developers of these programs to go back and start from scratch again, with the
  913. TSR/ACC combination that Ken suggested.  I have absolutely no plans to do this
  914. with MultiDesk -- I've got much more important things to do with my time.
  915.  
  916. Ken,
  917.  
  918.   What about my idea of a "vector snapshot" TSR program that saves all the
  919. important stuff at exec_os time?  I'd be happy to write a program like this,
  920. if I had a foolproof documented way to detect a resolution change.  (I left a
  921. message to this effect before, but I think it got wiped out in the GEnie
  922. crash.) The "snapshot" approach is the only reliable way to solve this
  923. problem, as far as I can see.
  924.  
  925. - Charles
  926.  ------------
  927. Category 3,  Topic 12
  928. Message 53        Mon Sep 04, 1989
  929. K.BAD [s/w engine]           at 04:50 EDT
  930.  
  931. Detecting the resolution change is still the problem, Charles. Have you tried
  932. making the DA watch for an Mfree with its own basepage as the argument?  As
  933. far as I know, the only time the DA's TPA should be freed is by the AES on a
  934. resolution change.  If you see the Mfree call, unhook all your vectors, then
  935. let the Mfree fall through.  Lemme know how that works...
  936.  
  937.   ttfn...
  938.   (*ken*)
  939.  ------------
  940. Category 3,  Topic 12
  941. Message 54        Mon Sep 04, 1989
  942. C.F.JOHNSON                  at 09:53 PDT
  943.  
  944. Ken,
  945.  
  946.   I'll try that approach; sounds like it might be possible. Thanks for the
  947. suggestion.
  948.  
  949. - Charles
  950.  ------------
  951. Category 3,  Topic 12
  952. Message 55        Tue Sep 05, 1989
  953. PSINC                        at 10:43 EDT
  954.  
  955. Yep Charles, since Atari didn't make any guidelines to start with I think they
  956. should help to solve the problem with the knowledge they have on the AES. I
  957. don't think making rules up midstream is the answer.  To be honest, at first I
  958. thought ' I bet Apple wouldn't let Mac devs steal vectors in this way", but
  959. then I thought "wait a minute - they have  stated what is correct, and what
  960. isn't, from the beginning.".  All of us agree that we have to follow the
  961. rules.  But we have to know what they are!
  962.   Mark
  963.  ------------
  964. Category 3,  Topic 12
  965. Message 56        Thu Sep 07, 1989
  966. JLS [John STanley]           at 19:57 CDT
  967.  
  968.   Ken, first off, I haven't seen anyone say anything about not wanting the
  969. desktop to be part of the system.  What I've seen time and time again,
  970. however, is that developers think that anything the system can do should be
  971. trappable (is that a word?) and useable thru an applications program.  I see
  972. no reason that the desktop-style resolution change shouldn't have always been
  973. avalable as a legal system call.  Nothing you've said has changed my opinion
  974. on that.
  975.   (This is especialy true since you also keep insisting that shell programs,
  976. not gemdos are responsible for intercepting and processing shel_write calls. 
  977. If something that inherent to the proper functioning of interlocked gem
  978. programs is a function that an independant shell has to process, then I see no
  979. reason to keep any aspect of the desktop from being included in a secondary
  980. shell-type program.)
  981.  
  982.   Re the ACC+TSR vs ACC question.  I agree that the ACC+TSR is -technicaly-
  983. simpler.  Unfortunately, using that method is more complex for the user.  Any
  984. time you have more than one file necessary for a program to run correctly, you
  985. increase the probability of confusing and frustrating the user by the square
  986. of the number of files.  Any time I can create a single program that
  987. (correctly) accomplishes what my competitor needs two to accomplish, I have an
  988. edge and the user will perceive my product as being easier to use.
  989.   I agree with the others who've essentialy said "Atari should have produced
  990. and -freely- distributed guidelines for all these concerns over 5 years ago". 
  991. Since they haven't, simply saying "you shouldn't have done that" without
  992. providing a "legal" alternate method is simply bad business for Atari and
  993. isn't playing fair with the developers.
  994.  ------------
  995. Category 3,  Topic 12
  996. Message 57        Fri Sep 08, 1989
  997. SANDY.W                      at 10:30 EDT
  998.  
  999. I have to agree about the increased confusion that would result from having to
  1000. keep track of, and possibly modify, two different files. Especially for new
  1001. users. Some people have enough problem just understand the basic desktop,
  1002. seriously. The more possibilities you give the computer phobic, the more ways
  1003. they will find to break things, and incrase the probability they will not try
  1004. again.
  1005.  ------------
  1006. Category 3,  Topic 12
  1007. Message 58        Tue Sep 26, 1989
  1008. J.IRVIN1                     at 21:18 PDT
  1009.  
  1010. I have noticed a problem with TOS 1.0 mouse button response (using
  1011. evnt_multi()) after calling form_alert().  The response time is usually on the
  1012. order of 1/100 sec.; after form_alert() it slows to 1/5 sec and can only be
  1013. fixed by rebooting.  TOS 1.4 doesn't have this problem.  I wrote a program to
  1014. benchmark button clicks and uploaded it along with the source (MWC) as file
  1015. #12259, BTNTIME.ARC (beware of file #12257; it's a botched upload).  I figure
  1016. other people must have tread this same ground long ago, does anyone have a fix
  1017. for this?
  1018.  Thanks,
  1019.   Jarrell Irvin
  1020.  ------------
  1021. Category 3,  Topic 12
  1022. Message 59        Sat Oct 14, 1989
  1023. D.HURSEY                     at 15:02 PDT
  1024.  
  1025. Is it possible to get the metafile function bindings and escape codes as well
  1026. as any changes in old bindings in rainbow tos--without paying for the
  1027. developer's kit?
  1028.                                 dvh
  1029.  ------------
  1030. Category 3,  Topic 12
  1031. Message 60        Mon Oct 30, 1989
  1032. C.HARVEY                     at 23:06 EST
  1033.  
  1034. OK all you GEMophiles, tell me if you've heard of this before: I have
  1035. programmed a text editor as an accessory (named DIARY), and all was fine until
  1036. I added some embedded resource stuff (3 simple dialog boxes).  Now when I boot
  1037. up, my acc does not show up in the menu of acc's.  However, if I then run any
  1038. other program, or even SHOW a text file from the desktop, my acc starts
  1039. showing up in the menu as it's supposed to.  I've played around with where I
  1040. put the menu_register command with no change.  The program itself runs fine
  1041. once you can get  to it, and it loads/runs fine from Multi-desk.
  1042.  
  1043. Craig Harvey (c.harvey)
  1044.  ------------
  1045. Category 3,  Topic 12
  1046. Message 61        Tue Oct 31, 1989
  1047. A.HAMILTON1 [Alan H.]        at 04:43 MST
  1048.  
  1049.       Perhaps if you uploaded some code fragments, we could see what's going
  1050. on.
  1051.       Are you making *any* GEM calls before you call menu_register()?  If you
  1052. are, that might cause the problem you describe.
  1053.  
  1054.       /
  1055.   /  *  /  Alan
  1056.  *     *
  1057.  ------------
  1058. Category 3,  Topic 12
  1059. Message 62        Tue Oct 31, 1989
  1060. E.ROSENQUIST                 at 09:05 EST
  1061.  
  1062. Craig:  see my reply in the text editor topic (cat 2, topic 37).
  1063.  
  1064. Eric
  1065.  ------------
  1066. Category 3,  Topic 12
  1067. Message 63        Tue Oct 31, 1989
  1068. C.HARVEY                     at 23:34 EST
  1069.  
  1070. The only earlier GEM call is the appl_init, which I believe is necessary to
  1071. get the appl ID for the menu_register call.
  1072.  ------------
  1073. Category 3,  Topic 12
  1074. Message 64        Wed Nov 01, 1989
  1075. A.HAMILTON1 [Alan H.]        at 04:47 MST
  1076.  
  1077.       Right, you have to do appl_init() before you do any GEM calls.
  1078.       You should have something like this:
  1079.  
  1080.  extern int gl_apid;
  1081.  
  1082.  main()
  1083.  {
  1084.      appl_init();
  1085.      menu_register(gl_apid, "  Title for ACC menu");
  1086.      /*  Other initialization code here */
  1087.      event = evnt_multi(.....    /* Or use evnt_mesag() */
  1088.  
  1089.         Is this close to what you have?
  1090.  
  1091.       /
  1092.   /  *  /  Alan
  1093.  *     *
  1094.  ------------
  1095. Category 3,  Topic 12
  1096. Message 65        Mon Nov 06, 1989
  1097. C.HARVEY                     at 21:18 EST
  1098.  
  1099. That's it exactly, except in Modula-2 the menu_register call takes a  string
  1100. variable (rather than a constant) so there is a line after  the appl_init to
  1101. assign the menu title to the string variable.
  1102.  ------------
  1103. Category 3,  Topic 12
  1104. Message 66        Wed Nov 15, 1989
  1105. D.LEMAY2 [Darby]             at 01:04 PST
  1106.  
  1107.             HELP!!!!! I am currently writing a inventory control prg and have
  1108. come across a problem with displaying dialogs. The dialog is fairly basic: a
  1109. parent box with  a child box containing editable boxes for input. In the
  1110. parent box are the exit buttons. When I try  to display the dialog, only one
  1111. or two of the buttons or text editable boxes are displayed, not the parent
  1112. box. I'm using Laser C with the Laser Resource prg. Sometimes just the child
  1113. box with the editable boxes are displayed. Everything works- the text cursor
  1114. moves to all the boxes (even the undisplayed ones) and the buttons work (if I 
  1115. can find them on the screen). I have checked the header file, all 
  1116.  and have sorted it everyway possible. I have traced the address of the tree
  1117. to see if has been corrupted-nope. At one time I got it to display properly,
  1118. but when I added a second dialog box to the rsc file, both wouldn't display
  1119. properly. Can any body tell me what's happening? I thought this would be an
  1120. easy part of the program, but so far it has been totally frustrating. I even
  1121. wrote a little prg to test dialogs- thinking maybe my code was screwing it up-
  1122. but it still does the same thing. Please reply soon- my forhead is getting
  1123. sore and holes are appearing in the wall!!!
  1124.               Thanx    D.LeMay
  1125.  ------------
  1126. Category 3,  Topic 12
  1127. Message 67        Wed Nov 15, 1989
  1128. E.ROSENQUIST [Strata]        at 12:59 EST
  1129.  
  1130. Check the parameters you're passing to objc_draw() - it sounds like the
  1131. starting object index and/or drawing depth is not correct.  You want 0 (or
  1132. ROOT) for the starting object and MAXDEPTH for the drawing depth.
  1133.  
  1134. Eric
  1135.  ------------
  1136. Category 3,  Topic 12
  1137. Message 68        Thu Nov 16, 1989
  1138. A.HAMILTON1 [Alan H.]        at 03:10 MST
  1139.  
  1140.       Also be sure that the clipping rectangle passed to objc_draw() is large
  1141. enough to contain the entire dialog.  Making it the same dimesions as what's
  1142. passed back from form_center() is what you normally want.
  1143.  
  1144.       /
  1145.   /  *  /  Alan
  1146.  *     *
  1147.  ------------
  1148. Category 3,  Topic 12
  1149. Message 69        Wed Nov 22, 1989
  1150. D.LEMAY2 [Darby]             at 00:39 PST
  1151.  
  1152. Alan and Eric: Thanx for the reply. The two ideas you have mentioned I have
  1153. already thoroughly checked. Here is the exact code I'm using: (The example
  1154. dialogue is a box with one exit button in it) OBJECT *box_addr; int xbox,
  1155. ybox, wbox, hbox, smally, smallx, smallw, smallh, exit_obj;
  1156.      rsrc_gaddr(0, ABOX, &box_addr);
  1157.      form_center(box_addr, &xbox, &ybox, &wbox, &hbox);
  1158.      smallx = xbox + (wbox/2);
  1159.      smally = ybox + (hbox/2);
  1160.      smallw = 0;
  1161.      smallh = 0;
  1162.      form_dial(FMD_START, smallx, smally, smallw, smallh, 
  1163.                xbox, ybox, wbox, hbox);
  1164.      form_dial(FMD_GROW, smallx, smally, smallw, smallh,
  1165.                xbox, ybox, wbox, hbox);
  1166.      objc_draw(box_addr, ABOX, 10, xbox, ybox, wbox, hbox);
  1167.      exit_obj = form_do(box_addr, -1);
  1168.      form_dial(FMD_SHRINK, smallx, smally, smallw, smallh,
  1169.                xbox, ybox, wbox, hbox);
  1170.      form_dial(FMD_FINISH, smallx, smally, smallw, smallh,
  1171.                xbox, ybox, wbox, hbox);
  1172.      box_addr[exit_obj].ob_state = NORMAL; / I cannot find any error in this
  1173. code. In further experimentation, I have found that the first dialogue created
  1174. in a rsc file displays fine, but when I add another dialogue, the second one
  1175. screws up in the manner I  have described. Also any others I add don't display
  1176. properly. I have tryed both LASER CFG.PRG and another called KRESOURC. Same
  1177. thing happens with both, so I don't think it's a problem with the program  Any
  1178. other ideas?    
  1179.       Darwin
  1180.  ------------
  1181. Category 3,  Topic 12
  1182. Message 70        Wed Nov 22, 1989
  1183. A.HAMILTON1 [Alan H.]        at 05:42 MST
  1184.  
  1185.       The problem is with the objc_draw() call.  Change it to read:
  1186.  
  1187.       objc_draw(box_addr, ROOT, MAX_DEPTH, xbox, ybox, wbox, hbox);
  1188.  
  1189.       If your header doesn't define ROOT and MAX_DEPTH, they are 0 and 8
  1190. respectively.
  1191.       The second argument to objc_draw() is the number of the object within
  1192. the tree to start drawing at.  Normally, you want to start at the "bottom"
  1193. part, the root, object #0.  You put ABOX, which just indicates where your
  1194. dialog is in the .RSC file.  That's what's making your dialog screw up when
  1195. you add another to the .RSC file.  ABOX changes, making objc_draw() start at a
  1196. different level.
  1197.       The third parameter indicates how many children of the starting object
  1198. are to be drawn.  Zero will make it draw only the object specified in the
  1199. second parameter.  One through seven will make it draw one to seven levels
  1200. below the starting object.  Eight is a special number that indicates you want
  1201. to draw all objects below the starting object.  Ten, which you put, isn't
  1202. valid.
  1203.  
  1204.       /
  1205.   /  *  /  Alan
  1206.  *     *
  1207.  ------------
  1208. Category 3,  Topic 12
  1209. Message 71        Wed Nov 22, 1989
  1210. DOUG.W                       at 12:11 EST
  1211.  
  1212. In the Depth field, the value 8 has no significance.  Any value greater than
  1213. the number of levels results in all levels being drawn.  I suspect DRI picked
  1214. 8 as a reasonable, but arbitrary value.
  1215.  
  1216. --Doug
  1217.  ------------
  1218. Category 3,  Topic 12
  1219. Message 72        Thu Nov 23, 1989
  1220. D.LEMAY2 [Darby]             at 01:04 PST
  1221.  
  1222. THANX A WHOLE LOT ALAN!!!!!!! I was going by the example program in the ATARI
  1223. ST Application Programming book by DATATECH PUB. They don't tell you that
  1224. information, and since your only working with one dialogue,  it works fine.
  1225. They say use 10 as the depth field to cover most circumstances. I'll check and
  1226. see if MAX_DEPTH is defined. Well, now I can get on with the program! Sure was
  1227. frustrating, having such a  simple seeming code continually screw up. Thanx
  1228. again, and thanx for the quick reply!!
  1229.     ***Darwin***
  1230.  ------------
  1231. Category 3,  Topic 12
  1232. Message 73        Sat Nov 25, 1989
  1233. L.WEINHEIMER                 at 13:30 PST
  1234.  
  1235. Is it possible, and if so how, to change the text in the menu for a desk
  1236. accessory, once it has been loaded.  Calling the registration a second time
  1237. does not work, so I was wondering how it might be done. This would be great
  1238. for DAs to signal status or availability.
  1239.  
  1240. Larry
  1241.  ------------
  1242. Category 3,  Topic 12
  1243. Message 74        Mon Nov 27, 1989
  1244. J.ALLEN27                    at 00:12 EST
  1245.  
  1246. Yah that would be nice.
  1247.  ------------
  1248. Category 3,  Topic 12
  1249. Message 75        Mon Nov 27, 1989
  1250. C.DAYMON                     at 20:00 EST
  1251.  
  1252. I've noticed several programs that make the desk accessories unavailable when
  1253. they are running.  One is the game, Drachen, from Germany.  Is there a GEM
  1254. call that I don't remember that was used to achieve this? (Actually, I can't
  1255. think when I would use it, but I'd like to know.)
  1256.  
  1257. -Craig W. Daymon
  1258.  ------------
  1259. Category 3,  Topic 12
  1260. Message 76        Mon Nov 27, 1989
  1261. E.ROSENQUIST [Strata]        at 21:08 EST
  1262.  
  1263. I think that all they do is make the menu entries DISABLED, either by
  1264. accessing the object in their menu tree directly or by calling menu_ienable().
  1265.  
  1266. Eric
  1267.  ------------
  1268. Category 3,  Topic 12
  1269. Message 77        Mon Nov 27, 1989
  1270. GRIBNIF                      at 21:59 EST
  1271.  
  1272.  I doubt that changing the text of the menu entries for DA's could be
  1273.  done legally. I believe that they are part of the resource (in memory)
  1274.  for the GEM desktop, even when another program is running.
  1275.  
  1276.  Dan
  1277.  ------------
  1278. Category 3,  Topic 12
  1279. Message 78        Mon Nov 27, 1989
  1280. A.HAMILTON1 [Alan H.]        at 21:19 MST
  1281.  
  1282.       Yep, it's possible.  Menu_register does not make a copy of the menu
  1283. name; it only keeps a pointer to the name that's in your code.  By changing
  1284. what the pointer you passed to menu_register() points to, you can change the
  1285. Desk menu title.  The following code is an accessory that changes its name
  1286. every time you select it.
  1287.  
  1288.  #include <aesbind.h>
  1289.  
  1290.  char name1[] = "  Original name";
  1291.  char name2[] = "  New name";
  1292.  
  1293.  main() {
  1294.       extern int gl_apid;
  1295.       char namebuffer[32];
  1296.       int msgbuffer[8];
  1297.       int toggle = 0;
  1298.  
  1299.       appl_init();
  1300.       strcpy(namebuffer, name1);
  1301.       menu_register(gl_apid, namebuffer);
  1302.       for (;;) {            /* For-ever */
  1303.             evnt_mesag(msgbuffer);
  1304.             strcpy(namebuffer, (toggle != 0) ? name1 : name2);
  1305.             toggle ^= 1;
  1306.       }
  1307.  }
  1308.  
  1309.       /
  1310.   /  *  /  Alan
  1311.  *     *
  1312.  ------------
  1313. Category 3,  Topic 12
  1314. Message 79        Tue Nov 28, 1989
  1315. CBARRON                      at 03:47 EST
  1316.  
  1317.   /*   code to kill acc access from a gem menu given the menu address and
  1318.   index of the about... item. */
  1319.   void kill_accs(menu_ptr,aboutidx)long menu_ptr;int aboutidx;
  1320.   {
  1321.       int k;
  1322.       for(k=aboutidx+2;k<aboutidx+8;k++)
  1323.           menu_ienable(menu_ptr,k,0);
  1324.    }
  1325.  ------------
  1326. Category 3,  Topic 12
  1327. Message 80        Tue Nov 28, 1989
  1328. E.ROSENQUIST [Strata]        at 12:30 EST
  1329.  
  1330. Right-on Alan.  I've been using this 'trick' for a while now with no adverse
  1331. effects.  One thing to keep in mind though:  this is the sort of thing that
  1332. could quite easily stop working in a future revision of GEM, since GEM might
  1333. switch to copying the string rather than just hanging on to the pointer.  You
  1334. should also make sure to keep the entry <= 20 characters since that's the
  1335. limit mentioned in GEM docs and enforced by some (but not all) resource
  1336. editors.
  1337.  
  1338. Eric
  1339.  ------------
  1340. Category 3,  Topic 12
  1341. Message 81        Tue Nov 28, 1989
  1342. C.DAYMON                     at 19:15 EST
  1343.  
  1344. Thanks, I'll capture this and save it away.
  1345.  
  1346. -Craig W. Daymon
  1347.  ------------
  1348. Category 3,  Topic 12
  1349. Message 82        Tue Nov 28, 1989
  1350. DOUG.W                       at 23:26 EST
  1351.  
  1352. Hmm, if I remember right, I just disabled the "dummy" ACC entries in my menu
  1353. resource in the resource editor.  I suppose you could also "unlink" the ACC
  1354. entries from the object and shorten the menu so that they don't show at all.
  1355.  
  1356. --Doug
  1357.  ------------
  1358. Category 3,  Topic 12
  1359. Message 83        Wed Nov 29, 1989
  1360. GRIBNIF                      at 18:57 EST
  1361.  
  1362.  Vewwy intawesting. I'll keep this in mind. So, does menu_bar() handle all
  1363.  the pointer changes in the resource tree so that the ob_spec's for the
  1364.  strings point to the correct location? This would seem to be the case,
  1365.  because I remember doing some tests and I found that the length of the
  1366.  string in the resource file (contrary to waht Eric said) did not matter.
  1367.  Methinks I will play with this a bit.
  1368.  
  1369.  Dan
  1370.  ------------
  1371. Category 3,  Topic 12
  1372. Message 84        Wed Nov 29, 1989
  1373. C.DAYMON                     at 20:15 EST
  1374.  
  1375. Thanks Doug, I hadn't thought that using the resource editor that way would
  1376. affect the accessories.  That seems like the safest way.  Then there should be
  1377. no reason to restore the tree on exit.
  1378.  
  1379. -CWD
  1380.  ------------
  1381. Category 3,  Topic 12
  1382. Message 85        Wed Nov 29, 1989
  1383. L.WEINHEIMER                 at 20:04 PST
  1384.  
  1385. Thanks Alan!
  1386.  ------------
  1387. Category 3,  Topic 12
  1388. Message 86        Thu Nov 30, 1989
  1389. E.ROSENQUIST [Strata]        at 10:28 EST
  1390.  
  1391. Dan - it's not so much the length of the accessory title string, but rather
  1392. the width of the drop down box itself.  AES doesn't seem to adjust this at run
  1393. time - it just leaves it at the width that the author created via the resource
  1394. editor.  Resource editors like RCS 2 don't let you change the width, hence the
  1395. need to stick to 20 characters if you wan't to play well with other
  1396. applications.
  1397.  
  1398. Eric
  1399.  ------------
  1400. Category 3,  Topic 12
  1401. Message 87        Sat Dec 02, 1989
  1402. A.CUMMINGS [Big Al]          at 12:41 PST
  1403.  
  1404. I am looking for some info on forcing a Media detect update. We are pulling
  1405. out our already thinning hair trying to clean up Cheetah. Also we put in a 
  1406.  cold boot and we lose the keyboard. GEM we love it!!
  1407.  ------------
  1408. Category 3,  Topic 12
  1409. Message 88        Sat Dec 02, 1989
  1410. GRIBNIF                      at 20:01 EST
  1411.  
  1412.  Eric,
  1413.  
  1414.  Ah, yes, I had forgotten about that. And, yes, apparently it is the
  1415.  menu_bar function that changes the pointers of the menu strings for
  1416.  desk accessories so that they point to the strings within the DA's code.
  1417.  This means that as long as you keep the outer box large enough, you can
  1418.  save a few bytes in the resource by replacing all those fake menu entries
  1419.  for DA's with empty strings.
  1420.  
  1421.  Al,
  1422.  
  1423.  Are you a registered developer? Did you get the TOS 1.4 notes? They have
  1424.  a very good example on how to force media change. Beware, though, I have
  1425.  discovered that under certain circumstances even Atari's own method can
  1426.  cause a very bad crash due to the bugs in the way open folders are handled
  1427.  in TOS 1.0 and 1.2.
  1428.  
  1429.  
  1430.  Dan
  1431.  ------------
  1432. Category 3,  Topic 12
  1433. Message 90        Sun Dec 03, 1989
  1434. ORION.MICRO                  at 13:19 EST
  1435.  
  1436. Al,
  1437.  
  1438.   You should be able to force a media-change status by simply doing a Rwabs()
  1439. call with a buffer address of 0.  For example,
  1440.  
  1441.          Rwabs (1, 0L, 0, 0, 2)
  1442.  
  1443. should set the media-change status on drive C: (I'm not sure about the first
  1444. argument -- can't remember if it should be 0 or 1).
  1445.  
  1446.       Keith
  1447.  ------------
  1448. Category 3,  Topic 12
  1449. Message 91        Sun Dec 03, 1989
  1450. DOUG.W                       at 17:30 EST
  1451.  
  1452. This is (I believe) officially undocumented and hard disk drivers are not
  1453. require to support this.  It should work fine on floppies, though.
  1454.  
  1455. --Doug
  1456.  ------------
  1457. Category 3,  Topic 12
  1458. Message 92        Mon Dec 04, 1989
  1459. JLS [John STanley]           at 05:05 CST
  1460.  
  1461.   There's a program from Moshe Braner called UPROOT that does a media-change
  1462. on any drive.  I'm not sure if it's in the library, but if it's not, let me
  1463. know and I'll upload it.  It includes source code in assembly...
  1464.  ------------
  1465. Category 3,  Topic 12
  1466. Message 93        Mon Dec 04, 1989
  1467. GRIBNIF                      at 14:37 EST
  1468.  
  1469.  Yup, I just dug-out my source to UPROOT. It does the same thing that is
  1470.  suggested in the Atari docs.
  1471.  
  1472.  Dan
  1473.  ------------
  1474. Category 3,  Topic 12
  1475. Message 94        Mon Dec 04, 1989
  1476. JLS [John STanley]           at 19:32 CST
  1477.  
  1478.   Are you sure Dan?  I haven't looked at it in over a year, but I thought
  1479. Moshe had used a slightly more elaborate trick to flush even floppy cache
  1480. programs that don't know about the special parameter call to set media
  1481. change...
  1482.  ------------
  1483. Category 3,  Topic 12
  1484. Message 95        Mon Dec 04, 1989
  1485. DOUG.W                       at 22:04 EST
  1486.  
  1487. John, the "official" Atari method doesn't depend on the RWABS trick, and works
  1488. with any drive.
  1489.  
  1490. --Doug
  1491.  ------------
  1492. Category 3,  Topic 12
  1493. Message 96        Mon Dec 04, 1989
  1494. L.WEINHEIMER                 at 21:09 PST
  1495.  
  1496. I have two questions:
  1497.  
  1498. The first has to do with a "Bug" that Tom Hudson pointed out way back with the
  1499. appl_find() call.  After a program is terminated and the ST is returned to the
  1500. DESKTOP the old program can still be found with this call.  I have a desk
  1501. accessory that I want to work while a specific program is called.  If I use
  1502. AC_CLOSE to detect the end of the DESKTOP, and use appl_find(), fine, but then
  1503. the program cycles through the routine detecting a AC_CLOSE at the end of the
  1504. program, and the appl_find says the program is still there.  Has anyone found
  1505. a way around this bug?
  1506.  
  1507. Next, this same program I have been working on, developing as a program, then
  1508. converting to an accessory.  When I add the code, and execute as an accessory,
  1509. the windowing PAGE UP, PAGE DOWN (clickins  inside the grey slider area)
  1510. produces two messages.  This doesn't happen when the program is a program --
  1511. it also doesn't happen when the program erroneously executes from the DESKTOP.
  1512.  
  1513. Thanks in Advance --  Larry
  1514.  ------------
  1515. Category 3,  Topic 12
  1516. Message 97        Tue Dec 05, 1989
  1517. GRIBNIF                      at 19:15 EST
  1518.  
  1519.  John, ditto what Doug said.
  1520.  
  1521.  Larry,
  1522.  
  1523.  Personally, I wouldn't depend on appl_find() working for an application
  1524.  in the first place. Especially when you consider that if the user calls
  1525.  the application from inside a shell other than the GEM desktop the buffer
  1526.  that appl_find checks is not updated (unless the shell uses shel_write).
  1527.  Is the program (not the ACC) something you wrote? If so, I would suggest
  1528.  you try having IT use appl_find to look for the desk accessory, instead
  1529.  of vice-versa.
  1530.  
  1531.  
  1532.  Dan
  1533.  ------------
  1534. Category 3,  Topic 12
  1535. Message 98        Tue Dec 05, 1989
  1536. JLS [John STanley]           at 23:43 CST
  1537.  
  1538.   Dan and Doug.  Ok guys, sorry about that.  The last time this question came
  1539. up online, someone at Atari suggested using the RWABS trick so I had assumed
  1540. that was the "officialy sanctioned" method.  (I'be been too busy for the last
  1541. 4 months to even take the time to do a detailed read of the 1.4 docs... <sigh>
  1542. )
  1543.   Thanks for the correction.
  1544.  
  1545.  ------------
  1546. Category 3,  Topic 12
  1547. Message 99        Tue Dec 05, 1989
  1548. L.WEINHEIMER                 at 22:39 PST
  1549.  
  1550. Dan:
  1551.  
  1552. Sorry, the program that I am writing the Accessory for is a comercial product
  1553. (not mine).
  1554.  
  1555. Larry
  1556.  ------------
  1557. Category 3,  Topic 12
  1558. Message 100       Fri Dec 08, 1989
  1559. C.HARVEY                     at 20:12 EST
  1560.  
  1561. Is there possibly an "easy" way to allow window slider scrolling ?
  1562.  
  1563. I understand TOS 1.4 has this built in, but it seems that there should be a
  1564. way to have sliders continue to slide by holding down the mouse button on the
  1565. earlier TOS's.  I figure when you do a window_create call, TOS/GEM must (?)
  1566. create the objects somewhere in memory just as if you programmed in all the
  1567. window pieces as resource objects.  This would mean that there's a "Touch
  1568. Exit" bit associated with the arrow buttons and if that bit were set, the
  1569. arrow button would repeat with the mouse button depressed.
  1570.  
  1571. Am I nuts?  Is this already an old/proven idea?  or should I start  figuring
  1572. out how to find that little BIT?
  1573.  ------------
  1574. Category 3,  Topic 12
  1575. Message 101       Sat Dec 09, 1989
  1576. DOUG.W                       at 02:11 EST
  1577.  
  1578. Interesting idea...  I don't think anyone has discussed how windows are
  1579. represented internally.
  1580.  
  1581. --Doug
  1582.  ------------
  1583. Category 3,  Topic 12
  1584. Message 102       Sat Dec 09, 1989
  1585. TOWNS                        at 03:53 EST
  1586.  
  1587.  This is a nice idea, but there are applications that depend on the 
  1588.  way it works now. This is something that the application should take 
  1589.  care of. 
  1590.  
  1591.  For example, if you hold down the Left Mouse Button on a window "arrow"
  1592.  in DeskSet II, it will continue to scroll until the end of the window.
  1593.  To install code in the OS that would make it continue automatically 
  1594.  would probably break DeskSet II and other applications.
  1595.  
  1596.  I think the solution would be to write an application library that 
  1597.  handles this for you. Most of the commercial software developers usually
  1598.  write their own interfaces that sit on top of the AES. Remember that 
  1599.  the AES is nothing more than a set of User Interface tools. How you
  1600.  take advantage of them is your choice.
  1601.  
  1602.  This is obvious from the fact that there are good user interfaces and
  1603.  bad ones :-)
  1604.  
  1605.  -- John
  1606.  ------------
  1607. Category 3,  Topic 12
  1608. Message 103       Sun Dec 10, 1989
  1609. J.ALLEN27                    at 02:17 EST
  1610.  
  1611. The mechanism Deskset uses would determine if it would break or not. Does
  1612. Deskset do this on TOS 1.0,1.2? Wouldn't this be breaking the rules? And most
  1613. important...how many people will ever have DesksetII?
  1614.  ------------
  1615. Category 3,  Topic 12
  1616. Message 104       Sun Dec 10, 1989
  1617. DARLAH [RT~SYSOP]            at 14:52 EST
  1618.  
  1619. Jim:
  1620.  
  1621. I hear that the laser/dtp bundling deal is coming in with DeskSet. You may see
  1622. people with this product due to that fact. Whether they stick with it might be
  1623. another thing. I was not impressed and perhaps it  will be another dust
  1624. collecter. Time will tell.......now won't it.
  1625.  ------------
  1626. Category 3,  Topic 12
  1627. Message 105       Sun Dec 10, 1989
  1628. C.HARVEY                     at 20:24 EST
  1629.  
  1630. I don't think the idea I had in mind could possibly affect any program  other
  1631. than the one doing it.  I'm not talking about redirecting any interrupt
  1632. vectors or anything.  I guess my question is simply, does GEM deal with window
  1633. pieces (namely arrow buttons) created from the built-in functions the same as
  1634. if the programmer created them as AES objects.
  1635.  ------------
  1636. Category 3,  Topic 12
  1637. Message 106       Wed Dec 20, 1989
  1638. J.MCCRACKEN                  at 18:21 PST
  1639.  
  1640. Does anyone know if there is a way to hide a folder temporarily.  I am having
  1641. some friends over to play with the computer, and there are certain folders I
  1642. would rather not have them see.  Thanks in advance for your help.
  1643.  
  1644. John
  1645.  ------------
  1646. Category 3,  Topic 12
  1647. Message 107       Wed Dec 20, 1989
  1648. JLS [John STanley]           at 22:56 CST
  1649.  
  1650.   That's not a GEM question John, so I suspect the topic politzi will be
  1651. moving your question soon, but...
  1652.  
  1653.   Assuming the folders you want to hide are in the root directory you can
  1654. temporarily hide them using a sector editor.  If you change the first
  1655. character in the root directory entry describing a folder into an ascii 229
  1656. (hex E5) character, gemdos will think it's been deleted, but the sectors used
  1657. will still be marked in-use so you can later recover the folder by changing
  1658. the 229 back into whatever character you had there before.
  1659.  
  1660.   BTW, because gemdos does cache some of the directory info, you should hide
  1661. or restore the directorys using the sector editor, save the changes, exit the
  1662. editor, and then reboot your machine to make sure gemdos recognises the
  1663. changes both times.
  1664.  
  1665.   BTW2, You can easily screw-up your disk using a sector editor if you edit
  1666. things other than the folder names without knowing what you are doing.  I
  1667. therefore take no responibility for any damage you may do to your directory
  1668. information if you don't make the right changes.  I just know what I told you
  1669. does work because I've occasionaly had relatives over myself...
  1670.  
  1671.   If you need a good sector editor, Memfile (in the library here on GEnie)
  1672. works well...
  1673.  ------------
  1674. Category 3,  Topic 12
  1675. Message 108       Thu Dec 21, 1989
  1676. ISD2 [Julius]                at 21:49 EST
  1677.  
  1678. Changing the first character of the folder name is dangerous.  What if a new
  1679. folder is created or a file is created?  GEMDOS will look for empty slots with
  1680. E5 in them.  Zowie...yer folder really disappeared.
  1681.  
  1682. Best way I've found is to keep 'goodies' on the last partition and just remove
  1683. that icon and save the desktop.
  1684.  ------------
  1685. Category 3,  Topic 12
  1686. Message 109       Thu Dec 21, 1989
  1687. C.F.JOHNSON                  at 19:50 PST
  1688.  
  1689.   Yep, Julius....I agree.  Just remove the icon for the drive that contains
  1690. the "sensitive" files from the DESKTOP.INF file. (Of course, this may involve
  1691. some reorganizing of the data on the drives in question...)
  1692.  
  1693. - Charles
  1694.  ------------
  1695. Category 3,  Topic 12
  1696. Message 110       Fri Dec 22, 1989
  1697. JJKENNEDY [RT*SysOp]         at 01:27 EST
  1698.  
  1699.    If you use UIS, you might want to disable it also.  UIS will show the
  1700. partition with the icon present or not.
  1701.  
  1702. --John
  1703.  ------------
  1704. Category 3,  Topic 12
  1705. Message 111       Fri Dec 22, 1989
  1706. JLS [John STanley]           at 00:39 CST
  1707.  
  1708.   Hmm..  Julius is right.  I didn't use the drive in question to save anything
  1709. to the root while the folders were "hidden" so I didn't run into that problem.
  1710. Sorry, I should have mentioned this. . .  Julius, thanks for the 'save'...
  1711.  
  1712.   And JJKennedy is correct that just removing the icons isn't a solution if
  1713. you use any programs that use the gem file-selector and you have UIS, Little-
  1714. Green Selector, or tos 1.4 installed...
  1715.  
  1716.   Humma...  Looks like it's time to write a folder-hideing prg..?
  1717.  ------------
  1718. Category 3,  Topic 12
  1719. Message 112       Fri Dec 22, 1989
  1720. J.EIDSVOOG1                  at 17:56 PST
  1721.  
  1722. All this talk got me curious so I used a disk editor to set one of my folders
  1723. to 'hidden' (kids, don't try this at home).  Voila, it disappeared but will
  1724. not be destroyed by writing new files to the disk.  Of course, MaxiFile will
  1725. show it if you use 'SHOW HIDDEN FILES', and you can still open it and use it. 
  1726. For the brave, simply change the attribute byte (the byte after the folder
  1727. name) from a $10 to a $12, but don't blame me for any misuse of this
  1728. information.
  1729.  
  1730. John
  1731.  ------------
  1732. Category 3,  Topic 12
  1733. Message 113       Fri Dec 22, 1989
  1734. J.HARRIS32                   at 18:52 PST
  1735.  
  1736.   I am trying to get both mouse and keyboard input at the same time, but
  1737. having intermittant results.  I am using the AES call graf_mkstate to get the
  1738. mouse position and button status.  Then, if there are no mouse buttons
  1739. pressed, I use the GEMDOS call Cconis ($0b) to check for key presses.  The
  1740. process repeats until there is either mouse button or keyboard input.
  1741.  
  1742. The problem I am having, is that key presses are occasionally skipped.  I hear
  1743. the audible keyclick sound from the monitor, but the program does not detect
  1744. the key press.  (Happens approx 1 out of 5 times).
  1745.  
  1746. What is causing the missed keys?  Is there a better way to get the inputs I
  1747. need?
  1748.  
  1749. Thanks - John Harris
  1750.  ------------
  1751. Category 3,  Topic 12
  1752. Message 114       Fri Dec 22, 1989
  1753. ISD2 [Julius]                at 23:07 EST
  1754.  
  1755. You can't mix GEM AES and GEMDOS calls...
  1756.  
  1757. Any problem using evnt_multi()?  Ask for mouse and keyboard events then use
  1758. graf_mkstate() right after the evnt_multi() call to get the ALT, CTRL, and
  1759. SHIFT key states...
  1760.  ------------
  1761. Category 3,  Topic 12
  1762. Message 115       Sat Dec 23, 1989
  1763. TOWNS                        at 00:46 EST
  1764.  
  1765.  Julius is right. You should use Evnt_multi() to handle the inputs.
  1766.  Why poll something you don't have to? Let the AES do it for you! That's
  1767.  what it's there for! :-)
  1768.  
  1769.  -- John
  1770.  ------------
  1771. Category 3,  Topic 12
  1772. Message 116       Sun Dec 24, 1989
  1773. J.HARRIS32                   at 01:05 PST
  1774.  
  1775.  Charles, this is what I know so far about the LZH header.
  1776.  
  1777.  Byte  Offset  Contents ------  -------- 0-1     The first two bytes are a
  1778. mystery still. 2-6     5 bytes ASCII, either '-lh0-' or '-lh1-' identifying
  1779. whether
  1780.         compression is off (i.e. stored file), or on. 7-$a    Size of
  1781. compressed data, byte reversed format.  (Low byte first)
  1782.         (P.S. It's wonderful converting from Intel processors isn't it...) $b-
  1783. $e   Size of original data, low byte first. $f-$14  Must be the Date-Time
  1784. info, but I haven't checked the format yet. $15     Size of the filename. $16-
  1785. xx  Filename, up to the length specified in $15.  No padded spaces. The file's
  1786. CRC value comes right after the filename, followed by the compressed data.
  1787.  
  1788. Each file in the archive has this header+data format.  There is nothing
  1789. special at the front, and each segment simply follows the previous one.
  1790.  
  1791. That should be enough, and if you have any questions, let me know.
  1792.  
  1793. John
  1794.  ------------
  1795. Category 3,  Topic 12
  1796. Message 117       Sun Dec 24, 1989
  1797. C.F.JOHNSON                  at 09:46 PST
  1798.  
  1799.   Thanks, John.  Unfortunately, GEnie's editor managed to make hash out of
  1800. your message, but I think I can decipher what I need to know.
  1801.  
  1802. - Charles
  1803.  ------------
  1804. Category 3,  Topic 12
  1805. Message 118       Sun Dec 24, 1989
  1806. J.HARRIS32                   at 23:50 PST
  1807.  
  1808.    Thank you for the quick responses.
  1809.  
  1810.  I don't think evnt_multi will work in my application.  I have put up a
  1811.  screen full of filenames, and when you click and drag the mouse, it selects
  1812.  files as the mouse is passing over them.  All I was checking the keyboard
  1813.  for, was the Return key to work with the default button object.
  1814.  
  1815.  If I could poll the mouse buttons and the keyboard at the same time, then
  1816.  after detecting a button press I could use graf_mkstate the whole time the
  1817.  button was held, to do all the file selecting.  The main reason I didn't
  1818.  want to use evnt_multi to do the initial detection, is because of the delay
  1819.  between when you press the button, and when the AES gives you the message.
  1820.  If the mouse is being moved during that time, the starting point is missed.
  1821.  I realize this has been improved in the 1.4 ROMs, but there are still a lot
  1822.  of non-upgraded machines.  The graf_mkstate call is fast enough so that no
  1823.  matter how fast the mouse is moved, no files get skipped.
  1824.  
  1825.  The bottom line, I'd like to have the Return key feature, but I don't want
  1826.  to compromise any performance to get it.  Is there another way to grab the
  1827.  mouse button and keyboard state?  Can you check the hardware without
  1828.  interference?
  1829.  
  1830.  John Harris
  1831.  ------------
  1832. Category 3,  Topic 12
  1833. Message 119       Mon Dec 25, 1989
  1834. A.HAMILTON1 [Alan H.]        at 07:19 MST
  1835.  
  1836.       You can get the information returned by graf_mkstate() by reading some
  1837. of the line A variables.  Call linea0() and use what's returned in D0 as the
  1838. base for the following offsets:
  1839.  
  1840.       -602  Mouse x position
  1841.       -600  Mouse y position
  1842.       -596  Mouse buttons (bit 0 = right button, bit 1 = left)
  1843.       I think if you read these variables directly, you can use the BIOS
  1844. routines to read the keyboard.  Since you won't be calling GEM, it won't get a
  1845. chance to "eat" keystrokes.
  1846.  
  1847.       /
  1848.   /  *  /  Alan
  1849.  *     *
  1850.  ------------
  1851. Category 3,  Topic 12
  1852. Message 120       Mon Dec 25, 1989
  1853. J.HARRIS32                   at 15:27 PST
  1854.  
  1855. Thank you Alan, it worked great.  I still had the old line-a document.  You
  1856. know, the one that taunts you about all the things that are supposed to be
  1857. described *below*...  I'll have to get the salad file again.  (Lost it in a
  1858. system crash before I got a chance to read it).  It probably contains answers
  1859. to lots of other questions as well.
  1860.  
  1861. John
  1862.  ------------
  1863. Category 3,  Topic 12
  1864. Message 121       Tue Dec 26, 1989
  1865. J.EIDSVOOG1                  at 18:10 PST
  1866.  
  1867. But if you read the mouse directly, you'll have to try and figure out how to
  1868. eliminate mouse button 'fall-through' when you quit your program, bring up a
  1869. file selector or an alert box.  Fun stuff. 
  1870.  ------------
  1871. Category 3,  Topic 12
  1872. Message 122       Tue Dec 26, 1989
  1873. J.HARRIS32                   at 23:08 PST
  1874.  
  1875. Thanks Alan, it worked great.  I still had the old line-a document.  You know,
  1876. the one that taunts you about all the things that are supposed to be described
  1877. *below*...  I'll have to get the salad file again.  (Lost it in a system crash
  1878. before I got a chance to read it).  It probably contains answers to lots of
  1879. other questions as well.
  1880.  
  1881. And thank you John for the warning.  Fortunately, I end up in a dialog box
  1882. before exiting.
  1883.  
  1884. John Harris
  1885.  
  1886.  ------------
  1887. Category 3,  Topic 12
  1888. Message 123       Sun Dec 31, 1989
  1889. J.HARRIS32                   at 15:39 PST
  1890.  
  1891.  Is there a way to tell the difference between whether an application was
  1892.  called from a command line, or called by double-clicking with an
  1893.  installed application?  (Where the filename is put in the command line
  1894.  buffer).  Thanks - John
  1895.  ------------
  1896. Category 3,  Topic 12
  1897. Message 124       Tue Jan 02, 1990
  1898. J.HARRIS32                   at 19:34 PST
  1899.  
  1900. Charles,
  1901.  
  1902. I still need to rephrase my command line question.  Does GEM give any special
  1903. identifiers to let you know that your program was called as an installed
  1904. application?  In other words, when your program is called as an application,
  1905. it has the filename that was 'clicked on' in the command line buffer.  If you
  1906. type 'UNLZH FILE' from a CLI, you will also have the file- name in the input
  1907. buffer.  I want to be able to distiguish between those two events, as the
  1908. program needs to respond differently in each situation.
  1909.  
  1910. My earlier comment about the spaces was related to this task.  The filename
  1911. from an application call always starts in the first character of the buffer. I
  1912. was wondering if the data from a command line call would start with the
  1913. 'space' character in between UNLZH and the Filename.  If that were true, it
  1914. would be a way to distinguish command lines from application calls.  I suspect
  1915. though, some CLI's probably remove the leading space or spaces.  If they did,
  1916. the command line buffer would look identical to an application call.  That's
  1917. the problem.  I want to know how the program was called.  Is there a way to
  1918. find out?
  1919.  
  1920. Thanks.  John
  1921.  ------------
  1922. Category 3,  Topic 12
  1923. Message 125       Tue Jan 02, 1990
  1924. DOUG.W                       at 23:33 EST
  1925.  
  1926. On the ST, the "command line" passed to an application is actually a "command
  1927. tail" and doesn't contain the name of the application itself.
  1928.  
  1929. --Doug
  1930.  ------------
  1931. Category 3,  Topic 12
  1932. Message 126       Tue Jan 02, 1990
  1933. C.F.JOHNSON                  at 22:05 PST
  1934.  
  1935. John,
  1936.  
  1937.   OK, I think I understand what you're asking.  Unfortunately, the answer is
  1938. probably "no".  I don't think there's any way to tell if a command line has
  1939. been set up by 'Install Application', or typed into a CLI.  In either case,
  1940. the first byte in the command line buffer (at the basepage+129 ...
  1941. basepage+128 has the length of the command line) will be the first byte of the
  1942. filename.
  1943.  
  1944.   To make things even worse, you should also be prepared to handle the command
  1945. line whether it has a full pathname (e.g. C:\UTILITY\LZH\STUFF.LZH), or
  1946. whether it just has the filename alone (e.g. STUFF.LZH).
  1947.  
  1948. - Charles
  1949.  ------------
  1950. Category 3,  Topic 12
  1951. Message 127       Wed Jan 03, 1990
  1952. JLS [John STanley]           at 01:17 CST
  1953.  
  1954.   John, mind telling me why you need to handle it differently?
  1955.   Seems to me that it's important to have it work the same no matter which way
  1956. you call the program with a parameter...
  1957.  
  1958.   If you can give a better explanation of why you think you need to recognise
  1959. the difference, perhaps one of us can suggest an alternate method of
  1960. accomplishing the same type of operation...
  1961.  ------------
  1962. Category 3,  Topic 12
  1963. Message 128       Wed Jan 03, 1990
  1964. TOWNS                        at 02:44 EST
  1965.  
  1966.  I think there is a way to see if you are being run from the desktop
  1967.  or from a shell. I think you can look into the BasePage for information
  1968.  like this. I am just guessing and may be totally wrong, but I will 
  1969.  ask around and see what I can find out.
  1970.  
  1971.  -- John
  1972.  ------------
  1973. Category 3,  Topic 12
  1974. Message 129       Wed Jan 03, 1990
  1975. J.HARRIS32                   at 03:21 PST
  1976.  
  1977.  The situation is in the UNLZH program.  When called from a CLI, it needs
  1978.  to bypass the GEM dialog box, and go straight to extraction.  When you
  1979.  double-click an LZH file from the desktop, it puts up the dialog box so
  1980.  you can select the different functions.
  1981.  
  1982.  This is not inconsistant.  Running an installed application is a mouse/GEM
  1983.  operation.  Typing into a CLI is not.  It's the difference between running
  1984.  the program in GEM mode or TOS mode.  It should respond differently.
  1985.  
  1986.  What I have done in 1.2 is to make you have to type something in front of
  1987.  the filename.  Like an 'X' as in ARC.TTP.  It will then search past it for
  1988.  the filename.  It grabs full paths, like 1.1 was supposed to do also, but
  1989.  alas, didn't.
  1990.  
  1991.  John Harris
  1992.  ------------
  1993. Category 3,  Topic 12
  1994. Message 130       Wed Jan 03, 1990
  1995. TOWNS                        at 12:22 EST
  1996.  
  1997.  You could account for each situation like this:
  1998.  
  1999.  1. Check for a command line. If there is a 'FULL' command line with 
  2000.     our options present, then excute the program as a TOS program (as
  2001.     if you were being run from a shell..)
  2002.  
  2003.  2. If you have a command line WITHOUT your options and it just contains
  2004.     the .LZH filename that was passed as an installed application, then
  2005.     you run the program as a GEM program and get the options from the 
  2006.     user.
  2007.  
  2008.  3. If you don't have a command line, then run as a normal GEM program.
  2009.  
  2010.  4. If you have a command line that doesn't look like that of your 
  2011.     normal command line or that of an Installed Application, then print
  2012.     a usage message.
  2013.  
  2014.  I hope this helps.
  2015.  
  2016.  -- John
  2017.  ------------
  2018. Category 3,  Topic 12
  2019. Message 131       Wed Jan 03, 1990
  2020. J.HARRIS32                   at 23:34 PST
  2021.  
  2022.  Thanks John,
  2023.  This is basically the approach I used in 1.2, although the program does not
  2024.  actually do anything with command line options.  It just uses them to put
  2025.  UNLZH in TOS mode.
  2026.  ------------
  2027. Category 3,  Topic 12
  2028. Message 132       Thu Jan 04, 1990
  2029. J.HARRIS32                   at 00:04 PST
  2030.  
  2031.  I have a question regarding the new FSEL routine that allows a title
  2032.  string.  If you make the call on a machine that doesn't support it, do you
  2033.  get an error back in INT_OUT?  Or do you need to determine that the
  2034.  routine doesn't exist beforehand, and call the older one to start with?
  2035.  
  2036.  John.
  2037.  ------------
  2038. Category 3,  Topic 12
  2039. Message 133       Thu Jan 04, 1990
  2040. C.F.JOHNSON                  at 09:50 PST
  2041.  
  2042. John,
  2043.  
  2044.   If you make a call to fsel_exinput with a version of TOS that doesn't
  2045. support it, you get a "Bad Function Number" alert box. You'll have to first
  2046. determine which version of TOS you're living with, then call fsel_exinput only
  2047. if the version is greater than or equal to $104.
  2048.  
  2049. - Charles
  2050.  ------------
  2051. Category 3,  Topic 12
  2052. Message 134       Fri Jan 05, 1990
  2053. JLS [John STanley]           at 04:13 CST
  2054.  
  2055.   Towns is correct.  (Except when running ram-TOS)  You can normaly figure out
  2056. if you're being run from the desktop by tracing back the parent-basepage
  2057. pointers and figuring out how "deep" you are.
  2058.  
  2059.   On the other hand, I think I'd prefer to have the command line arguments (or
  2060. lack thereof) control the TTP/PRG operations since I, for one, would like to
  2061. be able to us unlzh in full GEM mode while still running it from a cli
  2062. interface.
  2063.  
  2064.   As an alternative, you could check the M_HID_CT variable in the a-line
  2065. negative offset area to see if the mouse is active or not and use that to
  2066. determine if you want to allow gem access or if you should just use the
  2067. command line arguments to extract the file double clicked from the desktop
  2068. (the mode I'd probably install).  This way if the user wants GEM control over
  2069. the extraction, he/she could install unlzh as a .PRG and if he/she just wants
  2070. it to extract, install it as a TOS application...
  2071.   Now that I think of it, this (along with John's ideas) sounds like the best
  2072. alternative.
  2073.  
  2074.  ------------
  2075. Category 3,  Topic 12
  2076. Message 135       Sat Jan 06, 1990
  2077. J.HARRIS32                   at 21:36 PST
  2078.  
  2079.  That's a shame about the 'Bad Function', because I would guess that there
  2080.  are no ways to determine if a user has older ROMs, but is using one of the
  2081.  after market file selector programs that support that feature.  I suppose
  2082.  I will end up making it configurable.
  2083.  ------------
  2084. Category 3,  Topic 12
  2085. Message 136       Sun Jan 07, 1990
  2086. ISD2 [Julius]                at 11:14 EST
  2087.  
  2088. But there is a way to determine which version of TOS is in the machine!
  2089.  ------------
  2090. Category 3,  Topic 12
  2091. Message 137       Sun Jan 07, 1990
  2092. C.F.JOHNSON                  at 09:45 PST
  2093.  
  2094. Julius,
  2095.  
  2096.   I think John's point was that there's no way to tell if a user has a version
  2097. of TOS that doesn't support fsel_exinput, BUT also has installed an alternate
  2098. item selector that does.  (Which is true.)
  2099.  
  2100. - Charles
  2101.  ------------
  2102. Category 3,  Topic 12
  2103. Message 138       Sun Jan 07, 1990
  2104. M.EASTER [Mike]              at 12:48 PST
  2105.  
  2106.        Charles - re old TOS plus newer selectors
  2107.  
  2108.        Does your old STart selector support fsel_exinput?  (The reason
  2109.  I ask is because I'm using the STart selector with TOS 1.0.)
  2110.  
  2111.        I like the STart selector because it is "smaller" and simpler.
  2112.  
  2113.        What kind of problems can I have with such a combination?
  2114.  ------------
  2115. Category 3,  Topic 12
  2116. Message 139       Sun Jan 07, 1990
  2117. DOUG.W                       at 15:53 EST
  2118.  
  2119. Can't you just call fsel_exinput and if it returns a "Bad Function" error,
  2120. call fsel_input instead?
  2121.  
  2122. --Doug
  2123.  ------------
  2124. Category 3,  Topic 12
  2125. Message 140       Sun Jan 07, 1990
  2126. C.F.JOHNSON                  at 13:46 PST
  2127.  
  2128. Mike,
  2129.  
  2130.   No, the Start Selector does not support fsel_exinput.
  2131.  
  2132. Doug,
  2133.  
  2134.   Unfortunately, the system puts up an alert box on a "Bad Function Number"
  2135. error, instead of just returning a code.  (I don't think it would make the
  2136. right impression if people had to click through that error alert every time
  2137. they used the file selector...)
  2138.  
  2139. - Charles
  2140.  ------------
  2141. Category 3,  Topic 12
  2142. Message 141       Sun Jan 07, 1990
  2143. ISD2 [Julius]                at 17:11 EST
  2144.  
  2145. Gee Charles...you did have to complicate things, didn't you?  <grin>
  2146.  ------------
  2147. Category 3,  Topic 12
  2148. Message 142       Sun Jan 07, 1990
  2149. E.ROSENQUIST [Strata]        at 21:22 EST
  2150.  
  2151. I don't suppose this is the proper place to post this, but since we're on the
  2152. subject....
  2153.  
  2154. Charles:  I was experimenting the other night & added code to put the LGSELECT
  2155. compatible prompt strings in my fsel_input() calls.  Just for fun I thought
  2156. I'd try the similar trick for fsel_exinput(), ie. increase the count for
  2157. addr_in by two and pass two more strings.  No luck.  Is this supposed to work,
  2158. and if not, could you make it work please? Considering that you already handle
  2159. the extra strings for fsel_input() calls I can't imagine it being all that
  2160. horrendous.... but then again, I didn't write it so I have no way of knowing.
  2161.  
  2162. Eric
  2163.  ------------
  2164. Category 3,  Topic 12
  2165. Message 143       Mon Jan 08, 1990
  2166. DOUG.W                       at 01:21 EST
  2167.  
  2168. Charles, any change LGS could put add a cookie for other programs to look for?
  2169.  
  2170. --Doug
  2171.  ------------
  2172. Category 3,  Topic 12
  2173. Message 144       Sun Jan 07, 1990
  2174. C.F.JOHNSON                  at 23:13 PST
  2175.  
  2176. Eric,
  2177.  
  2178.   Hmmm....so you're saying that you passed fsel_exinput an addrin count of 5,
  2179. and put the title strings for LGSELECT in addrin[3] and addrin [4]?  Well,
  2180. that definitely ain't gonna work with LGSELECT the way it is right now.  But
  2181. that might be a good idea for a future update...thanks for the suggestion.
  2182.  
  2183. Doug,
  2184.  
  2185.   Since we've been talking about this here, I've decided that I will add some
  2186. method for other programs to determine if LGSELECT is installed.  I haven't
  2187. decided on a method to use yet, however; it will probably either be through
  2188. the Cookie Jar or through an undefined BIOS call.  (The undefined BIOS call is
  2189. a _lot_ less work than properly setting up the Cookie Jar...)
  2190.  
  2191. - Charles
  2192.  ------------
  2193. Category 3,  Topic 12
  2194. Message 145       Sat Jan 27, 1990
  2195. C.DAYMON                     at 17:21 EST
  2196.  
  2197. Hmm... I'm a bit confused by this conversation about fsel_exinput().  I
  2198. thought the function call was supposed to work on any version of TOS.  I has
  2199. the impression that fsel_input() would just ignore the extra parameter. Now
  2200. I'm a C programmer and not exactly sure what happens in assembly when the call
  2201. is made, but I thought that when a function is called in C, the parameters are
  2202. placed on the stack and a function (unless it wants the incoming parameters to
  2203. be 'register') would simply address locations on the stack to use the
  2204. parameters.  Throw a couple of extra parameters on the stack and they should
  2205. be ignored by the called function because it has no provisions to address that
  2206. far back on the stack.  On a return, the stack pointer is reset to the
  2207. location it was on before the call and all is fine.  If the additional string
  2208. pointer is the last parameter on the stack, it should never be seen by
  2209. fsel_input(), but will be there to be used by fsel_exinput().  Copying input
  2210. parameters to local variable space seems wasteful since this is just stack
  2211. space in a C program anyway. (Again, unless it is designated static or
  2212. register.)
  2213.  
  2214.  Wait a second, maybe I should completely digest the information presented
  2215. first.  I think what I said above is correct, but the problem is not the
  2216. number of passed parameters, but the function number actually called.  I guess
  2217. ideally fsel_exinput() would ALWAYS be called by new ROMs for either
  2218. fsel_input() or fsel_exinput() and if the extra parameter is present,
  2219. (fsel_exinput() was called) the string would be displayed. Otherwise, it would
  2220. be the same as calling fsel_input().  What I mean is that fsel_exinput() and
  2221. fsel_input() would have the SAME function number but new ROMs would check for
  2222. the extra parameter. (?)
  2223.  
  2224. -Craig W. Daymon
  2225.  
  2226. P.S. I always ramble like this when trying to figure a problem. Sorry.
  2227.  ------------
  2228. Category 3,  Topic 12
  2229. Message 146       Sat Jan 27, 1990
  2230. GRIBNIF                      at 20:22 EST
  2231.  
  2232.  fsel_input() and fsel_exinput() have different AES function numbers. If
  2233.  you call fsel_exinput() on a machine that doesn't support it you get an
  2234.  "Invalid function #" error alert on your screen. There ain't no way
  2235.  around it other than to look at the ROM version and decide which call to
  2236.  make. Of course, UIS and LGSELECT most likely support either regardless
  2237.  of TOS version, but you can't expect everyone to be using one of these,
  2238.  now can you? <smile>
  2239.  
  2240.  Whoever added the call for fsel_exinput() into the 1.4 ROMs probably
  2241.  could have made it work according to the number of parameters in the
  2242.  addrin array, but I guess he didn't think of that. Oh well.
  2243.  
  2244.  Dan
  2245.  ------------
  2246. Category 3,  Topic 12
  2247. Message 147       Sun Feb 04, 1990
  2248. JLS [John STanley]           at 01:05 CST
  2249.  
  2250.   UIS-II doesn't support fsel_exinput because it didn't exist (I think) when
  2251. UIS-II was written.  I have no idea what UIS-III does or doesn't do since I
  2252. don't have it yet...
  2253.  ------------
  2254. Category 3,  Topic 12
  2255. Message 148       Fri Feb 09, 1990
  2256. J.HARRIS32                   at 00:02 PST
  2257.  
  2258.  I am having a couple problems converting UNLZH to a desk accessory.  First,
  2259.  is there a way to get GEM to redraw the entire screen when the DA exits?
  2260.  Right now, it's only redrawing the part occupied by the initial dialog box.
  2261.  
  2262.  I use the Line A variable to check mouse buttons during operation, and
  2263.  before going back to the main dialog box, I call EVNT_BUTTON to clear the
  2264.  button clicks from the AES.  This worked fine in the program version, but
  2265.  it never returns in the DA version.  What's going on?
  2266.  
  2267.  Thanks - John
  2268.  ------------
  2269. Category 3,  Topic 12
  2270. Message 149       Sat Feb 10, 1990
  2271. GRIBNIF                      at 14:13 EST
  2272.  
  2273.  John,
  2274.  
  2275.  If you want to undraw the entire screen, you can either use
  2276.  use form_dial(FMD_FINISH... with a rectangle the size of the entire
  2277.  screen or you can have UNLZH open a window beforehand and then just
  2278.  close it when it is done.
  2279.  
  2280.  Why are you monitoring the mouse via the Line A variables? Why not use
  2281.  evnt_multi() like the rest of the world? The real purpose of evnt_button()
  2282.  is to wait for a button press, not to clear the AES' buffers.
  2283.  
  2284.  In either case, if your ACC needs to draw over the GEM menu bar, you will
  2285.  have to copy the menu bar into some place in memory before corrrupting it
  2286.  and then copy it back when you want the screen restored. There is no way
  2287.  to force the menu bar to redraw without knowing where its resource object
  2288.  tree is in memory.
  2289.  
  2290.  Dan
  2291.  ------------
  2292. Category 3,  Topic 12
  2293. Message 150       Sat Feb 10, 1990
  2294. C.HARVEY                     at 15:16 EST
  2295.  
  2296. Here's one for you ACC gurus: If I Alloc a block of ram at boot up (for my
  2297. text editor's buffer), and then switch resolutions (lo <-> med) via the
  2298. desktop Set Preferences, TOS does not Free up my block of memory.  This means
  2299. that when it reloads all the acc's in the new resolution, they go on top of
  2300. that unfreed ram thus using up gobs of ram unneccessarily. I've gotten as far
  2301. as being able to free it myself by watching for an AccClose notice in the GEM
  2302. msg buffer, and although this works, it then also frees it anytime an
  2303. application starts/stops, which leads to other problems.
  2304.  
  2305. Acc's like MultiDesk apparently have a way to deal with this, so it must be
  2306. possible.  However, I know that any of the other text editor acc's besides my
  2307. Diary also do NOT know how to deal with it.  Anyone willing to divulge the
  2308. secret??
  2309.  ------------
  2310. Category 3,  Topic 12
  2311. Message 151       Sat Feb 10, 1990
  2312. GRIBNIF                      at 15:43 EST
  2313.  
  2314.  Well, this whole thing has been discussed a lot in the past, but here
  2315.  goes again...
  2316.  
  2317.  When the GEM desktop changes resolutions it *should* release any memory
  2318.  allocated to the actual code of desk accessories (whether or not it does
  2319.  under all circumstances is still uncertain to me, since I've seen 
  2320.  things like you describe happen also.)
  2321.  
  2322.  What I think may be happening in your situation, however, is that because
  2323.  the memory you Malloc() ends up belonging to the GEM desktop and not to
  2324.  your desk accessory, it is not freed when the desktop changes rez.
  2325.  This means that a "hole" in memory is created where your desk accessories
  2326.  were previously, up to where the Malloc'd memory block still is. When the
  2327.  desk accessories get loaded the second time, they are loaded at the place
  2328.  after the Malloc'd block, because that is the largest block of free
  2329.  memory.
  2330.  
  2331.  The idea of doing the Mfree() during AC_CLOSE is not very good at all, not
  2332.  only because you are de-allocating memory in an order which is not the
  2333.  reverse of the way it was allocated (which is a no-no under the broken
  2334.  memory mangling of TOS 1.0 and 1.2) but also because I really don't think
  2335.  GEM does send an AC_CLOSE when it is going to change resolutions. In any
  2336.  event, it's just not a good idea to allocate memory from a desk accessory
  2337.  when it is initializing because of things like STARTGEM and TOs 1.4's
  2338.  autobooting feature that will cause the memory to belong to the wrong
  2339.  process if you do.
  2340.  
  2341.  What I would suggest is a configuration option for the buffer size that
  2342.  gets saved into the program itself. You can have the startup code for
  2343.  the desk accessory change its basepage so that GEM will know how much
  2344.  extra memory to reserve for the buffer. This way, when the user changes
  2345.  rez the whole thing automagically gets de-allocated. The disadvantage is
  2346.  that the buffer size cannot be changed without re-booting.
  2347.  
  2348.  I'm sure that someone else here can comment on what, specifically needs
  2349.  to be changed in the program to get GEM to reserve the extra memory. I
  2350.  think that just setting one of the segment sizes in the program header
  2351.  (like adding to the BSS) would be sufficient.
  2352.  
  2353.  Dan
  2354.  ------------
  2355. Category 3,  Topic 12
  2356. Message 152       Sat Feb 10, 1990
  2357. J.HARRIS32                   at 15:59 PST
  2358.  
  2359. Dan, thanks for the FORM_DIAL answer.  Worked great.
  2360.  
  2361. Mouse input for the program has been discussed here before, and EVNT calls
  2362. would not work for my application.  I did find a way to clear the extra mouse
  2363. clicks however.  I cleared bits 6 and 7 of the LineA variable CUR_MS_STAT, the
  2364. flags indicating whether the buttons have changed.  Is there anything wrong
  2365. with doing this?
  2366.  
  2367. John
  2368.  ------------
  2369. Category 3,  Topic 12
  2370. Message 153       Sat Feb 10, 1990
  2371. C.F.JOHNSON                  at 18:20 PST
  2372.  
  2373. C.Harvey,
  2374.  
  2375.   There is a way to detect when a resolution change is occurring, but it's
  2376. necessary to intercept trap #1 to do it.  Basically, the idea is to watch for
  2377. an Mfree() call with the address of your basepage.  The only time you should
  2378. ever see this is right before the desktop changes resolution.  When the
  2379. Mfree() comes through, you do your own Mfrees for any memory blocks you've
  2380. allocated, and then replace the trap #1 vector with whatever was there when
  2381. you first grabbed it.
  2382.  
  2383.   There are some other big problems with allocating memory from a desk
  2384. accessory, not least of which is that any Mallocs you do will be assigned to
  2385. the current running application (NOT to your desk accessory), and if the user
  2386. quits that application your memory will be freed.
  2387.  
  2388. - Charles
  2389.  ------------
  2390. Category 3,  Topic 12
  2391. Message 154       Sun Feb 11, 1990
  2392. C.HARVEY                     at 13:12 EST
  2393.  
  2394. Ahh, some good info from both of you.  From prior discussions on this stuff I
  2395. was aware of the problems of allocating memory AFTER bootup such as from
  2396. within a running application, which is why I was going to only do it at
  2397. bootup.  I was not aware of the problems with Freeing it myself
  2398.  however.  Since I am willing to have it only changeable with a reboot, it
  2399. sounds like Dan's idea of modifying the basepage is a good approach. Besides,
  2400. I now know a _little_ about what a basepage is, but all I know of stealing
  2401. traps is from overhearing it here. By the way, on the ACC Close message on a
  2402. res change, it does definitely happen, and if your window is open, it is
  2403. preceded by a Redraw message. (at least on my TOS 1.0 system). Thanks much!
  2404. Craig
  2405.  ------------
  2406. Category 3,  Topic 12
  2407. Message 155       Sun Feb 11, 1990
  2408. C.F.JOHNSON                  at 10:42 PST
  2409.  
  2410. Craig,
  2411.  
  2412.   Yes, if your ACC's window is open, you do get an AC_CLOSE message on a res
  2413. change.  But it's fairly useless at that point, since if you're going to free
  2414. up your Mallocs every time you get an AC_CLOSE message, you're in trouble
  2415. already.
  2416.  
  2417.   I've heard that rumor about problems if you release Mallocs in anything
  2418. other than the exact opposite order.  It may have been true in TOS 1.0, but
  2419. I've never seen any strange behavior like that in TOS 1.2...even when I tried
  2420. to make it happen with MultiDesk.
  2421.  
  2422.   I used the technique of modifying the executable file header (_not_ the
  2423. basepage) in the Macro Mouse accessory.  It's quite simple; just change the
  2424. "length of BSS" variable at 10 bytes into the header.  (That's decimal 10.) 
  2425. You may also want to read your basepage during init to find out how big your
  2426. BSS really is -- which presents another set of problems, since the only legal
  2427. way to get the address of your basepage when you're running as an accessory is
  2428. from register A0.  (A0 points to your basepage when you're an accessory...when
  2429. you're a program A0 is zero on startup.)
  2430.  
  2431. - Charles
  2432.  ------------
  2433. Category 3,  Topic 12
  2434. Message 156       Wed Feb 14, 1990
  2435. C.HARVEY                     at 23:50 EST
  2436.  
  2437. Charles, thanks much for that info about A0.  I'll have to give it a try
  2438. although I've gotten around it by subtracting 1200 (dec) from where you would
  2439. normally get the basepage address off the stack (i.e., get the address off the
  2440. stack and then subtract 1200).  For whatever reason, this actually seems to
  2441. work fine.  And yes, modifying the bss length in the file header is working
  2442. fine.
  2443.  
  2444. I think my only remaining problem is getting the filename in case it's  been
  2445. changed from the name I give it (e.g., if it's being run under MultiDesk as
  2446. 'diary18.acx').  I had thought I could get that from the 'command line image'
  2447. at byte 128 of the base page, but it doesn't seem to be there.  I can get the
  2448. drive and path ok, but what about the filename??
  2449.  
  2450. Craig
  2451.  ------------
  2452. Category 3,  Topic 12
  2453. Message 157       Mon Feb 19, 1990
  2454. C.HARVEY                     at 16:29 EST
  2455.  
  2456. A couple things... first, a little more info on finding the basepage of a DA: 
  2457. I tried reading A0 and using it as a pointer to the basepage,  which didn't
  2458. work.  One obvious suggestion that hadn't occurred to me is to just take 256
  2459. off the program counter at the start of the program (Darek Mihocka pointed
  2460. that one out to me).
  2461.  
  2462. Next question:  Is there a way to find out if a given window is open (and thus
  2463. able to be Topped)?  It seems that Flash closes my DIARY window when going to
  2464. on-line mode, but the message sent is an identical redraw message to what the
  2465. desktop sends when moving a directory window over my window (without closing
  2466. it).  The trouble comes when returning to Flash's edit mode and trying to get
  2467. my Diary window back.  If I just try to Top it, everything locks up, but if I
  2468. re-Open it, it's fine. But I can't just always re-open, since if I'm not in
  2469. Flash, it's trying to open an open window which screws things up.  And there
  2470. is no error code returned from either the window open call or the window top
  2471. call when they screw up as above.    [I have Compute's AES book on order, 
  2472. which may shed some light on all this...]
  2473.  ------------
  2474. Category 3,  Topic 12
  2475. Message 158       Mon Feb 19, 1990
  2476. C.F.JOHNSON                  at 17:22 PST
  2477.  
  2478. Craig,
  2479.  
  2480.   All I can tell you is that I've converted all my program/accessories over to
  2481. use the A0 method to find their basepage, and it seems to work fine.  Aren't
  2482. you using Pascal? If so, the Pascal startup code may be destroying A0 before
  2483. you get a chance to examine it.  (I don't know...just a guess.)
  2484.  
  2485.   Yes, you can just subtract 256 from the PC at the start of the program. 
  2486. That will probably work almost 100% of the time...but the hitch there is that
  2487. the basepage is _not_ guaranteed to always be located 256 bytes before the
  2488. start of your program code.  This means that if you really want to stick to
  2489. the book, you should try to make the A0 method work.
  2490.  
  2491. - Charles
  2492.  ------------
  2493. Category 3,  Topic 12
  2494. Message 159       Tue Feb 20, 1990
  2495. GRIBNIF                      at 19:58 EST
  2496.  
  2497.  As for the window stuff, if Flash truly is closing the window then it
  2498.  must be doing some pretty weird stuff. Are you sure it isn't just making
  2499.  another (invisible) window when you change modes? I've never heard of
  2500.  this behavior in Flash before, but I don't have a copy here so I can't
  2501.  test it. If Flash does close your window to the point where you can't
  2502.  set it with WF_TOP, Flash should definitely be fixed. This is not
  2503.  normal behavior for a GEM program. By the way, what happens if you open
  2504.  Atari's control panel, leave it open while switching to terminal mode,
  2505.  and then re-open the control panel from the dropdown? Does this crash
  2506.  also? If not, then you might be doing the wind_set() call incorrectly.
  2507.  
  2508.  Dan
  2509.  ------------
  2510. Category 3,  Topic 12
  2511. Message 160       Tue Feb 20, 1990
  2512. FB [ST Librarian]            at 20:27 EST
  2513.  
  2514. Dan,
  2515.  Leaving the control panel on and switching to the terminal is usually a good
  2516. way to crash. I don't know if it was ever fixed but it is one of those things
  2517. you do one time and never again! Flash was in it early stages when I tried
  2518. that and I just never really wanted to do it on newer versions.
  2519.  Fred
  2520.  ------------
  2521. Category 3,  Topic 12
  2522. Message 161       Wed Feb 21, 1990
  2523. GRIBNIF                      at 19:57 EST
  2524.  
  2525.  Wow. Major nastiness. If I were writing a desk accessory I wouldn't
  2526.  bother trying to avoid this problem, since it sounds like the kind of
  2527.  thing that is "accepted behavior" from the program. You may want to
  2528.  mention it in the doc file though, so users won't be tempted to try it.
  2529.  
  2530.  Dan
  2531.  ------------
  2532. Category 3,  Topic 12
  2533. Message 162       Sun Feb 25, 1990
  2534. C.HARVEY                     at 11:05 EST
  2535.  
  2536. Charles, Chances are you are right about my Modula-2 startup stuff somehow
  2537. destroying A0 before I can get to it.  For now I'm just sticking to the weird
  2538. way I found that works -- taking 1200 off the stack value.
  2539.  
  2540. Dan & Fred, I found a way around the Flash problem (after reaching despair on
  2541. it I read about my 'Honorable Mention' in the CPU Shareware Connection and got
  2542. so revitalized that I came up with a workable solution.  I'll just say that it
  2543. involves checking the FirstXYWH as if you wanted to do a redraw, and using the
  2544. result to determine whether to top or open the window.
  2545.  
  2546.  ------------
  2547. Category 3,  Topic 12
  2548. Message 163       Sun Feb 25, 1990
  2549. C.HARVEY                     at 11:13 EST
  2550.  
  2551. With all the progress I've made, Diary v 1.8 should be out very soon. However,
  2552. one thing I'd like to add (maybe not til 1.9) is the ability to run as either
  2553. an acc or a prg.  Is there some easy way to tell what filename your program
  2554. had when it was called?  This would also let me save config things to the acc
  2555. file even if it were run as acx through MultiDesk without asking the user to
  2556. find the file -- as well as letting  me know if it were run as a prg or not. A
  2557. related question is:  Is there a way to tell if your program was run as a prg
  2558. or acc without checking the extender?   I thought maybe the basepage's pointer
  2559. to parent's basepage would tell me something, but it seems like that's always
  2560. zero.
  2561.  
  2562. Craig
  2563.  ------------
  2564. Category 3,  Topic 12
  2565. Message 164       Sun Feb 25, 1990
  2566. C.F.JOHNSON                  at 08:53 PST
  2567.  
  2568. Craig,
  2569.  
  2570.   Subtracting 1200 from the stack pointer??  Now that's an odd one...I can't
  2571. imagine why that works, but my sincere advice is to find another method. 
  2572. You're asking for trouble down the line if you use a totally undocumented
  2573. technique like that.
  2574.  
  2575.   There's really no way to find out your accessory's filename after it runs. 
  2576. (Some time ago, I chased that rabbit down a hole for quite a while.)  However,
  2577. if you assume that the user doesn't rename the file (and you can tell him not
  2578. to, in your docs), it's easy to use Dgetdrv() and Dgetpath() at init time and
  2579. build a full pathname...and this will work either as a normal accessory or
  2580. loaded into MultiDesk.
  2581.  
  2582.   As for the prg/acc thing...the parent's basepage is indeed telling you
  2583. something!  When that pointer is zero, you're running as an accessory; when
  2584. it's not zero, you're a program. Using this method to determine which way
  2585. you're running is a pretty good second choice (instead of checking A0), but it
  2586. has a potential pitfall.  It requires you to assume that the basepage starts
  2587. 256 bytes before the beginning of your code, which is not guaranteed unless
  2588. your program was run from the desktop.  (A shell program could conceivably use
  2589. the different modes of Pexec to create a runnable program whose basepage is
  2590. not 256 bytes prior to its TEXT segment.)
  2591.  
  2592. - Charles
  2593.  ------------
  2594. Category 3,  Topic 12
  2595. Message 165       Fri Mar 02, 1990
  2596. C.HARVEY                     at 20:17 EST
  2597.  
  2598. Ahh well,  I guess I'll have to resort to letting the user find the file since
  2599. I DO want to allow users to rename the thing and thus be able to run multiple
  2600. copies of it at once (I've found this very handy at times). Then again, I can
  2601. leave it as it is, forcing the name to be one thing when reconfiguring the
  2602. buffer size, but once the user has reconfigured it, he is free to rename
  2603. it.... only mildly complicated.  Thanks for all the help!
  2604.  
  2605. Craig
  2606.  ------------
  2607. Category 3,  Topic 12
  2608. Message 166       Sun Mar 04, 1990
  2609. R.FOSTER1                    at 16:53 CST
  2610.  
  2611. I need a question about GDOS answered. I have a program that I some time ago
  2612. which copies a graphic image into a window as on. This has worked out just
  2613. fine for a long time I have added GDOS to my system, the blit call doesn't
  2614. cause
  2615.  to happen. If I take out GDOS(or G+PLUS), everything works . is a
  2616. andle,3,xyarray,&sourcemfdb,&destmfdb); some sort of initialization that needs
  2617. to be done with
  2618.  addition to the appl_init(), v_opnwrk(..),vs_clip(..) program doesn't use
  2619. GDOS but something about GDOS being messing things up. Any GDOS tips
  2620. appreciated.
  2621.  
  2622.  ------------
  2623. Category 3,  Topic 12
  2624. Message 167       Sun Mar 04, 1990
  2625. C.DAYMON                     at 23:11 EST
  2626.  
  2627. R.FOSTER1,
  2628.  Please repeat your last message.  It was a bit garbled and I'm not sure what
  2629. your asking.
  2630.  
  2631. -Craig W. Daymo
  2632.  ------------
  2633. Category 3,  Topic 12
  2634. Message 168       Mon Mar 05, 1990
  2635. E.ROSENQUIST [Strata]        at 12:30 EST
  2636.  
  2637. Check the work_in[] parameters to your v_opnvwk() call - you're probably
  2638. specifying normalized device coords (NDC:  0 to 32767) rather than raster
  2639. coords (RDC:  0 to screen-res).  Without GDOS NDC coords don't exist and hence
  2640. you get raster coords.  With it you're blitting to/from a very tiny area.
  2641.  
  2642. Eric
  2643.  ------------
  2644. Category 3,  Topic 12
  2645. Message 169       Fri Mar 09, 1990
  2646. R.FOSTER1                    at 21:22 CST
  2647.  
  2648. This is a repost due to garbled first post.
  2649.  
  2650. I am having a problem with using GDOS(or G+PLUS) which is really baffling me.
  2651. I wrote a program some time ago that as part of it's operation needs to blit
  2652. some images to the screen. This program has been working for some time but
  2653. since I added GDOS to my system, the blit calls no longer work. Nothing at all
  2654. happens. If I remove GDOS, everthing is fine again. I am speculating that
  2655. there is something else I need to do with GDOS loaded that I don't know about.
  2656.  
  2657. This is the program sequence. appl_init(); grhandle=graf_handle(...);
  2658. v_opnvwk(in,&grhandle,out); whandle=wind_create(...); wind_open(whandle,...);
  2659.  
  2660. ;;;/* Other stuff */ vro_cpyfm(whandle,3,....); /* Works fine without GDOS */
  2661.                            /* Does nothing with GDOS */ Thanks, Bob Foster
  2662.  
  2663.  ------------
  2664. Category 3,  Topic 12
  2665. Message 170       Sat Mar 10, 1990
  2666. E.ROSENQUIST [Strata]        at 13:41 EST
  2667.  
  2668. You're using the window handle 'whandle' rather than the VDI workstation
  2669. handle 'grhandle' in your vro_cpyfm() call.  Without GDOS you may have been
  2670. lucking out and having the same values in both.
  2671.  
  2672. Eric
  2673.  
  2674. ps:  use *SN to save a message containing things like source code that you
  2675. don't want GEnie to reformat.
  2676.  ------------
  2677. Category 3,  Topic 12
  2678. Message 171       Sat Mar 10, 1990
  2679. JLS [John STanley]           at 13:04 CST
  2680.  
  2681.   Good eyes Eric, I was trying to figure out what he was doing wrong and
  2682. because of the reformatting, that line came out looking like a seperate
  2683. comment.  Bravo!
  2684.  ------------
  2685. Category 3,  Topic 12
  2686. Message 173       Sat Mar 10, 1990
  2687. A.HAMILTON1 [Alan H.]        at 13:24 MST
  2688.  
  2689.       In the vro_cpyfm(whandle,3,...) statement, you should replace whandle
  2690. with grhandle.  All the VDI commands use this.  Only the wind_whatever()
  2691. commands use the window handle.  It may work without GDOS because it's
  2692. probably assuming screen output without actually checking the handle.  GDOS
  2693. *does* check the handle, so that could be what's messing you up.
  2694.  
  2695.       /
  2696.   /  *  /  Alan
  2697.  *     *
  2698.  ------------
  2699. Category 3,  Topic 12
  2700. Message 174       Tue Mar 13, 1990
  2701. M.L.HANSON                   at 18:26 CST
  2702.  
  2703.      What  are the rules for displaying hidden files  on  the 
  2704.      GEM desktop?   They normally show.   Today I _copied_  a 
  2705.      hidden file, and the copy didn't show. Great! All I have 
  2706.      to do is hide them,  copy them, and delete the original.  
  2707.      But I can't repeat the feat. I've got exactly one hidden 
  2708.      file  that's  treated properly but I can't  get  another 
  2709.      one.   I've tried both the UIS copy and the GEM copy. No 
  2710.      difference.
  2711.  
  2712.  ------------
  2713. Category 3,  Topic 12
  2714. Message 175       Tue Mar 13, 1990
  2715. V.AVERELLO [Vince-Cubed]     at 21:09 EST
  2716.  
  2717. I think that if a file has the hidden attribute and one other attribute set
  2718. (like read-only or archive) then the file WILL show on the desktop. If only
  2719. the hidden attribute is set then the file WILL NOT show. This is  something I
  2720. think I read in one source or another.
  2721.  
  2722. Vince - V-Cubed Software
  2723.  ------------
  2724. Category 3,  Topic 12
  2725. Message 176       Wed Mar 14, 1990
  2726. GRIBNIF                      at 21:32 EST
  2727.  
  2728.  Yup, Vince is right. If any attribute besides hidden is set, then you
  2729.  will always see the file on the GEM desktop (but not in NeoDesk <plug>).
  2730.  
  2731.  Dan
  2732.  ------------
  2733. Category 3,  Topic 12
  2734. Message 177       Thu Mar 15, 1990
  2735. C.DAYMON                     at 19:09 EST
  2736.  
  2737. OK, Hears a problem I recently encountered that I don't understand. (I guess
  2738. that's why I think it's a problem!)  I have opened a window for displaying a
  2739. graphics image (to allow clipping a section of the image) and I wanted the
  2740. window to be as large as possible so the maximum amount of the image would be
  2741. visible.  So I created a window the size of the entire screen, not just the
  2742. area below the menu.  Now everything works OK except when I go to click on the
  2743. "CLOSE" button to exit.  The button inverts, indicating selection but I don't
  2744. exit until I move the mouse below the area normally allotted for the menu. 
  2745. Any clues why this happens?
  2746.  
  2747.  This is on a Mega 4 with TOS 1.4.  The code is written in Laser C.
  2748.  
  2749. Creating the window the size of the area below where the menu would be results
  2750. in everything working as expected.
  2751.  
  2752. -Craig W. Daymon
  2753.  
  2754. P.S.  One more thing, closing a window that fills the entire screen does
  2755.       not result in the entire screen being redrawn.  The window Title
  2756.       bar remains at the top of the screen.
  2757.  ------------
  2758. Category 3,  Topic 12
  2759. Message 178       Thu Mar 15, 1990
  2760. C.F.JOHNSON                  at 16:57 PST
  2761.  
  2762. Craig,
  2763.  
  2764.   That happens because the area at the top of the screen is reserved for use
  2765. by the GEM Event Manager.  You can see this behavior in lots of programs; take
  2766. any program that uses a menu bar and evnt_multi to get keyboard input.  If you
  2767. move the mouse into the top line (the menu bar line) and hit a key, the Event
  2768. Manager will not send the MU_KEYBD message along to the application until you
  2769. move the mouse back into the desktop's "work area".  The top area doesn't get
  2770. redrawn either, because that area is outside the "work area" of the desktop's
  2771. window. (Window zero.)
  2772.  
  2773.   There's really no way to do what you're trying to do, and still use standard
  2774. GEM calls.  (Which is why you haven't seen any ST programs with *real* full-
  2775. screen windows before...)
  2776.  
  2777. - Charles
  2778.  ------------
  2779. Category 3,  Topic 12
  2780. Message 179       Fri Mar 16, 1990
  2781. D.S.HARRISON                 at 18:51 CST
  2782.  
  2783. If you did a wind_update(BEG_MCTRL), then the event manager would treat the
  2784. menu bar area like the rest of the screen. Unfortunately, your window controls
  2785. in that area would cease to function, at least through GEM.
  2786.  
  2787. Does anyone know of a possible bug in GEM related to non-detection of mouse-up
  2788. events, until the mouse is moved? I'm noticing that in a  program, and I've
  2789. also seen it in the GEM Desktop, where sometimes if you click on the desktop
  2790. background and the rubber rectangle appears, you can release the mouse button,
  2791. without moving the mouse, and the rubber rectangle will remain until the mouse
  2792. is moved.
  2793.  
  2794. -Doug
  2795.  ------------
  2796. Category 3,  Topic 12
  2797. Message 180       Fri Mar 16, 1990
  2798. C.DAYMON                     at 21:05 EST
  2799.  
  2800. Doug,
  2801.  I think that problem has been corrected in newer versions of the OS, but I
  2802. know it existed in version 1.0.  Something to do with the mouse not returning
  2803. information until the mouse is moved.  Maybe the information is packeted so
  2804. that motion returns the button state, but a change in button state doesn't
  2805. generate a separate message.  ANyway, I know of the problem, but forget the
  2806. exact cause.
  2807.  
  2808. Charles,
  2809.  Then it sounds to me like this is a bug in GEM.  (Or Atari GEM.)  I haven't
  2810. enabled a menu or even drawn one on the screen and GEM should ONLY be
  2811. responding to those possible states that I have activated.  (Which is just a
  2812. window with sliders and a CLOSE button.)  I realize that there are still
  2813. accessories active in the system, but again this should not matter since a
  2814. menu must be available for an accessory to be activated.  (Maybe the link to
  2815. the display of the menu has not been properly established?) I can probably
  2816. test and see if I get the same response if ALL accessories are removed.  It's
  2817. just annoying because I really wanted to maximize the window display.  Thanks
  2818. for the help.
  2819.  
  2820. -Craig W. Daymon
  2821.  ------------
  2822. Category 3,  Topic 12
  2823. Message 181       Fri Mar 16, 1990
  2824. D.S.HARRISON                 at 22:19 CST
  2825.  
  2826. Craig,
  2827.  
  2828. That's what I thought; it seems to be at a lower level than the AES, because
  2829. sampling the Line-A variables doesn't help. About your menu bar problem: I
  2830. found exactly the same thing you did, that is, it doesn't seem to matter
  2831. whether a menu has been displayed or not. The only solution I found was the
  2832. wind_update() call, but for your purposes, that's probably not acceptable
  2833. (unless you feel like rolling your own window controls).
  2834.  
  2835. -Doug
  2836.  ------------
  2837. Category 3,  Topic 12
  2838. Message 182       Sat Mar 17, 1990
  2839. DOUG.W                       at 01:36 EST
  2840.  
  2841. I think "GEM Law" states that all GEM applications will have a menu bar.
  2842.  
  2843. --Doug
  2844.  ------------
  2845. Category 3,  Topic 12
  2846. Message 183       Mon Mar 26, 1990
  2847. RHFACTOR                     at 01:30 EST
  2848.  
  2849. Hello GEM Gurus,
  2850.    I'd like to post a question to you all, though this may not be a GEM one. 
  2851. I've been asking all around, hope maybe this might be the right place.
  2852.   When the ST is booted, call a couple of clicks on the Drive 'A' icon  opens
  2853. a window displaying the directory. AT the top of the window is displayed the
  2854. number of bytes used in so-many-number of items.
  2855.   Question:  Where in the ST is this information gotten from. Specifically,
  2856. how does it know how many files are on disk.
  2857.    My predicament:  how to tap into this info. I'm working with GFA 3.07,  is
  2858. there a peek or bios call that can be read that tells how many files are on
  2859. disk.  It seems pretty slack that I  would have to read the DIR into an array,
  2860. and increment a counter to make sure that my program does not try to save more
  2861. than 112 files to a disk.
  2862.  I've have a disk that about 116 files where attempted to save, and the data
  2863. turned to scrambled eggs.   
  2864.    Any ideas or suggestion!      Thanks! Ron
  2865.  ------------
  2866. Category 3,  Topic 12
  2867. Message 184       Mon Mar 26, 1990
  2868. JLS [John STanley]           at 03:21 CST
  2869.  
  2870.   Ron, there's no single call to get the number of files on a single disk. 
  2871. However, I feel compelled to point out that you're certanly not limited to 112
  2872. files per disk....  Just put your files into a folder and your folder
  2873. directory will expand until you run out of space on-disk.. (for which a
  2874. function call does exist (although it's slow unless you're using TOS 1.4 or a
  2875. "diskfree" enhancement TSR program)).
  2876.   BTW, the info at the top of the window on the desktop is -not- the number of
  2877. files-on-disk.  It's the number of files in the directory currently being
  2878. shown.  Since subdirectories are allowed, you can have many other file areas
  2879. (subdirectories) on the disk that aren't included in the "xxxx bytes in xx
  2880. items" line in the window.
  2881.   BTW2, the info in the window line is determined by reading the directory,
  2882. counting the files, and adding up the sizes of all the files.
  2883.   BTW3, your problem with writing "too many files" to the root directory of a
  2884. disk is most likely caused by using a non-standard disk-formatter program that
  2885. put bogus info into the structure table stored on-disk that the ST uses to
  2886. figure out where to store stuff...  What formatter did you use for that
  2887. specific disk?
  2888.   BTW4, this whole line of discussion really has nothing to do with "GEM"
  2889. questions and possibly should be moved into a new topic by Darlah or one of
  2890. the other sysops...
  2891.  ------------
  2892. Category 3,  Topic 12
  2893. Message 185       Sun Apr 01, 1990
  2894. V.BURTON4                    at 15:27 MDT
  2895.  
  2896. Hello, All, I just downloaded MONSTER.ARC, which emulates a moniterm monitor
  2897. on any S ST with TOS 1.4 or newer.  I would like to know how to tell GEM that
  2898. you are working with a larger resolution, which apparently MONSTER does. This
  2899. would be great for a GDOS program I'm working on!  thanks! BTW, I'm using GFA
  2900. 3.07
  2901.  ------------
  2902. Category 3,  Topic 12
  2903. Message 186       Tue Apr 03, 1990
  2904. GRIBNIF                      at 14:58 EDT
  2905.  
  2906.  In order to get the AES portion of GEM to use a new screen size, you have
  2907.  to change a few of the Line A variables that the system maintains. The
  2908.  only catch is that you have to do it *before* GEM initializes, which 
  2909.  means it has to be done from a program that runs from the AUTO folder.
  2910.  
  2911.  This is not the kind of thing that is well-documented, and not for the
  2912.  faint of heart. If you'd like to experiment with it, however, you should
  2913.  have a look at one of the various documents on the "negative offset
  2914.  Line A variables", like the one called SALAD that is supplied with the
  2915.  developer kit from Atari.
  2916.  
  2917.  Dan
  2918.  ------------
  2919. Category 3,  Topic 12
  2920. Message 187       Tue Apr 03, 1990
  2921. DOUG.W                       at 15:24 EDT
  2922.  
  2923. Be sure to change ALL of the appropriate variables, or you'll get strange
  2924. results.
  2925.  
  2926. --Doug
  2927.  ------------
  2928. Category 3,  Topic 12
  2929. Message 188       Wed Apr 04, 1990
  2930. V.BURTON4                    at 18:58 MDT
  2931.  
  2932. Thanks for the info!  Another question, does anyone know of a PD Icon editor
  2933. editor, I'm using the resource construction program that comes with AGFA Basic
  2934. 3.07, and it says that Icon editors are available. cant seem to find one on
  2935. GENIE, though. . .
  2936.  ------------
  2937. Category 3,  Topic 12
  2938. Message 189       Sat Apr 07, 1990
  2939. BRIAN-G                      at 21:55 EDT
  2940.  
  2941. Got a question on GFA and Gem. Even if you dont know GFA you may be able to
  2942. answer so please read.
  2943.  
  2944. Doing something similar to a file selector. Window type thing but will be
  2945. client names. What kind of a  dialog do you use. I need to single or double
  2946. click on the client name as well as ok and canel buttons plus edit fields.
  2947. Closet I come is touchext on the names but what about double click. If I call
  2948. event_multi just after a form do and set button and timer,  event multi ends
  2949. immidately with a button event. (I do wait for the button to raise after
  2950. touchexit). How do I clear the event from FORM_DO. And then I set the name as
  2951. select and OBJC_DRAW but name doesnt redraw. I have to redraw the parent to.
  2952. In GFA there  is a Hybrid FORM_BUTTON. Cant get it to work even remotely.
  2953.  
  2954.    Also in windowing WIND_CALC doesnt return the right Height. It gets the
  2955. other values right though. WIND_GET returns same values. Why have WIND_CALC
  2956. when WIND_GET also perform similar functions.
  2957.  
  2958.         Jeez. Is that enough to complain about? Been saving them up trying to
  2959. solve on own.
  2960.  
  2961.            Somebody please
  2962.  
  2963.                               Brian Gantzler
  2964.  
  2965.  ------------
  2966. Category 3,  Topic 12
  2967. Message 190       Thu Apr 12, 1990
  2968. J.HARRIS32                   at 19:44 PDT
  2969.  
  2970.  How can you find the original memory size in cases where Ramdisks or other
  2971.  utilities have installed themselves at the top of memory and changed the
  2972.  pointers?  Can $424 (memcntlr) be used for that purpose, and if so, what
  2973.  value does it contain for 2M, 4M, and higher?
  2974.  Thanks, John
  2975.  ------------
  2976. Category 3,  Topic 12
  2977. Message 191       Fri Apr 13, 1990
  2978. B.MCCORKLE                   at 18:47 CDT
  2979.  
  2980. I read an earlier message that referred to the line a call to M_HID_CT, that
  2981. allowed access to the number of times the mouse was hidden. Can anyone give
  2982. the offset of M_HID_CT?
  2983.                 Thanks, Brian McCorkle
  2984.  ------------
  2985. Category 3,  Topic 12
  2986. Message 192       Sat Apr 14, 1990
  2987. DOUG.W                       at 00:46 EDT
  2988.  
  2989. Brian G., if you are looking for single or double-clicks, don't use form_do.
  2990. Simply use form_draw to put the dialog on the screen then use evnt_button (or
  2991. evnt_multi) to get the mouse clicks.  When you get a click, see if it was a
  2992. single- or double-click, and find out what object was under it (objc_find).
  2993.  
  2994. --Doug
  2995.  ------------
  2996. Category 3,  Topic 12
  2997. Message 193       Sat Apr 14, 1990
  2998. C.HARVEY                     at 09:57 EDT
  2999.  
  3000. re: M_HID_CT -- It is a word located at offset -596 (-$254) in the LineA
  3001. variable table.  Compute's Atari ST vol 3 has all these goodies and much more.
  3002.  
  3003. Craig
  3004.  ------------
  3005.